8. 검색어를 유추하여 수없이 Request
난 너의 에러메시지까지 저장하고 있다.
By, 수천 개도 넘는 봇들
9. 대안 #1
1. 웹사이트 루트에 robots.txt 파일의 생성
http://www.robotstxt.org/orig.html
# robots.txt for http://www.example.com/
User-agent: *
Disallow: /cyberworld/map/
#This is an infinite virtual URL space
# Cybermapper knows where to go.
User-agent: cybermapper
Disallow:
35. 대처방안
반드시 필요한 경우가 아니라면 HTML,
Javascript 등의 스크립트를 사용할 수 없도록
기능을 제거
인젝션에 사용할 문자열들은 블랙리스트
location=, href=, .open(, <script,
javascript:, .cookie, .write, alert(, (, (,
…
모든 submit에는 Referer를 확인(하지만 위조 가
능)
글 작성 시 요청되는 파일에서 Token 생성 후
Action 파일에서 Token 유효성을 체크
36. 쿠키 변조를 통한 권한 상승
암호화 하지 않은 쿠키는 손쉽게 변경 가능
- 대칭키 or 공개키 알고리즘 적용 필요
41. 닷넷의 탄생
- 개발생산성
- 웹서비스
- COM+
2002 2007 2009
닷넷2.0출시
2005
HOONS닷넷 1.0 개발
- ASP.NET 1.0
HOONS닷넷 2.0 개발
- ASP.NET 2.0
2008
HOONS닷넷 3.0개발
- ASP.NET MVC
닷넷3.5출시
닷넷3.0
2006 2010
ASP.NET MVC
1.0 출시
닷넷4.0출시
2012
웹2.0 기술의 정착
- 시멘틱 웹
- 사용자 중심의 웹
- Ajax 기술의 정착
RIA 기술의 열풍
- Flex
- Java FX
- Silverlight
스마트폰의 태동
- 아이폰
- 안드로이드
- 윈도우폰7
실버라이트 1.0
윈도우8&
닷넷4.5
출시 예정
WPF
WCF
WF
윈폰7 출시
53. ASP.NET MVC의 3Tier
BSL
(Business Service)Controller
DAL
(Data Access)
Entity (Data Scheme)
Data
Base
ASP.NET MVC WCF DLL+ DB
model
View
(Jquery&
Razor)
62. LINQ TO SQL 과 ENTITY Framework
• SQL Server 만 지원
• DB 스키마(테이블, 컬럼등) 직접 매핑
• 스트림 데이터를 지원하지 않음
LINQ to SQL
• 다양한 이기종 지원(Oracle, DB2 등)
• CSDL, MSL, SSDL 형태로 분리
• EntityClient를 통한 스트림 데이터 지원
Entity Framewrok
63. 엔티티 프레임워크의 도입
DB Model
Code
DB Model
Code
DB Model
Code
Design time
Design time
Design time
Design time
Runtime Runtime
DB First
Model First
Code First
73. SELECT
1 AS [C1],
[Project2].[Bonus] AS [Bonus],
[Project2].[C1] AS [C2],
[Project2].[FirstName] AS [FirstName],
[Project2].[LastName] AS [LastName],
[Project2].[C2] AS [C3]
FROM ( SELECT
[Project1].[Bonus] AS [Bonus],
[Project1].[FirstName] AS [FirstName],
[Project1].[LastName] AS [LastName],
[Project1].[C1] AS [C1],
(SELECT
COUNT(cast(1 as bit)) AS [A1]
FROM [Sales].[SalesOrderHeader] AS [Extent5]
WHERE [Project1].[BusinessEntityID] = [Extent5].[SalesPersonID]) AS [C2]
FROM ( SELECT
[Extent1].[BusinessEntityID] AS [BusinessEntityID],
[Extent1].[SalesQuota] AS [SalesQuota],
[Extent1].[Bonus] AS [Bonus],
[Extent2].[FirstName] AS [FirstName],
[Extent2].[LastName] AS [LastName],
(SELECT
SUM([Filter1].[A1]) AS [A1]
FROM ( SELECT
(SELECT
SUM([Extent4].[LineTotal]) AS [A1]
FROM [Sales].[SalesOrderDetail] AS [Extent4]
WHERE [Extent3].[SalesOrderID] = [Extent4].[SalesOrderID]) AS [A1]
FROM [Sales].[SalesOrderHeader] AS [Extent3]
WHERE [Extent1].[BusinessEntityID] = [Extent3].[SalesPersonID]
) AS [Filter1]) AS [C1]
FROM [Sales].[SalesPerson] AS [Extent1]
INNER JOIN [Person].[Person] AS [Extent2] ON ([Extent1].[BusinessEntityID] =
[Extent2].[BusinessEntityID]) OR (([Extent1].[BusinessEntityID] IS NULL) AND
([Extent2].[BusinessEntityID] IS NULL))
) AS [Project1]
WHERE [Project1].[C1] > [Project1].[SalesQuota]
) AS [Project2]
74.
75. 엔티티 프레임워크의 흑과백
“크지 않은 규모, 성능에 민감하지 않은 프로젝트
에서의 ORM은 최고의 생산성을 가져다 줄 것이
지만, 큰 프로젝트, 높은 성능, 복잡한 업무 로직에
서는 ORM을 추천하고 싶지 않다.”
=> SQL Tracing 작업으로 필수적으로 SQL
생성 결과를 확인해야 함
76. 로깅 #1. EFTracingProvider를 이용
http://blogs.msdn.com/b/jkowalski/archive/2009/06/11/tracing-and-caching-
in-entity-framework-available-on-msdn-code-gallery.aspx
77. 로깅 #2. 쿼리 실행 전 로그기록
public static void QueryLogger<T>(IQueryable<T> TraceQuery)
{
if (디버깅 모드라면)
{
//쿼리기록
LogBase.WriteLog("Entity", TraceQuery.ToString());}
}
}
78. 로깅 #3. 30일 한정판 Tracer를 이용
http://efprof.com/home
79. 아직 아쉬운 점
멀티 DB를 쓰지 못함
프로시저의 결과를 엔티티 컬럼으로 매핑이 어
려움
Lock 기능에 대한 불편함
기본기능으로 SQL 로깅이 포함되어 있지 않음
80. 아직 아쉬운 점: 인덱스설정 부분
//초기 DB 생성시 SQL 구문작성
protected override void
Seed(MyContext context)
{
context.Database.
SqlCommand("CREATE INDEX
IX_Person_Name ON Person
(Name)");
}
81. [정리] 엔티티 프레임워크 프로젝트의 성공
률을 높이기 위해서
잦은 테이블의 변경을 최소화 하기 위해서 DB
설계시간을 많이 투자해야 함
개발자는 식을 만들 때마다 실제 쿼리를 모니터
링 해야 함
- 개발자 교육 필요
- 쿼리 로그가 필수