Appearance
ASP.NET MVC
강의 목록
[ASP.NET MVC] 1. ASP.NET 소개 - .net Framework, .net Core https://www.youtube.com/watch?v=Y_X4A0P06Os
[ASP.NET MVC] 2. ASP.NET MVC Core 프로젝트 만들기 https://www.youtube.com/watch?v=mMIkH6T3euA
[ASP.NET MVC] 3. _Layout https://www.youtube.com/watch?v=86ehigeqri8
[ASP.NET MVC] 4. Razor Syntax https://www.youtube.com/watch?v=GRHy0FgrJrw
[ASP.NET MVC] 5. Controller에서 View로 데이터 전달하기 https://www.youtube.com/watch?v=TTQW2ou3w7c
[ASP.NET MVC] 6. EntityFramework Core 소개 및 MS SQL Server https://www.youtube.com/watch?v=7PTFfqov1wY
[ASP.NET MVC] 7. EntityFramework Core로 데이터베이스 생성하기 https://www.youtube.com/watch?v=MNmcTeEv07A
[ASP.NET MVC] 8. 회원가입 기능 만들기 https://www.youtube.com/watch?v=negMazMl7WQ
[ASP.NET MVC] 9. Visual Studio 2017 설치 및 2015 프로젝트 업그레이드 https://www.youtube.com/watch?v=tyx4Vyj5a_U
[ASP.NET MVC] 10. 로그인 입력 Form 만들기 https://www.youtube.com/watch?v=492E2t0gxEg
[ASP.NET MVC] 11. 로그인, 로그오프 기능 만들기 https://www.youtube.com/watch?v=G5AxF9pt4Pw
[ASP.NET MVC] 12. 게시판 리스트 출력하기 https://www.youtube.com/watch?v=ryf9ikInHsQ
[ASP.NET MVC] 13. 게시물 추가하기 https://www.youtube.com/watch?v=6wA9Ilhj6sA
[ASP.NET MVC] 14. 게시물 상세보기 페이지 만들기 https://www.youtube.com/watch?v=CbnoRYXgw0c
[ASP.NET MVC] 15. 자바스크립트 텍스트 에디터 적용하기 (feat. Trumbowyg) https://www.youtube.com/watch?v=oOFNh0KM7kU
[ASP.NET MVC] 16. 자바스크립트 텍스트 에디터 이미지 업로드 https://www.youtube.com/watch?v=7cKA-lEqDjM
[ASP.NET MVC] 17. Enterprise Architecture 프로젝트 구성하기 https://www.youtube.com/watch?v=dKvCZUec100
[ASP.NET MVC] 18. Dependency Injection, IoC Container 사용하기 https://www.youtube.com/watch?v=GWgXbQEOi9Y
[ASP.NET MVC] 19. MVC5에서 Unity Container를 이용한 Dependency Injection https://www.youtube.com/watch?v=ac-IQsmaY3M
[ASP.NET MVC] 20. appsettings.json를 통한 ConnectionString 처리하기 https://www.youtube.com/watch?v=UACohTbIfpM
[ASP.NET MVC] 21. async, await 비동기 처리 프로그래밍 구현하기 https://www.youtube.com/watch?v=T-XskK2kBmg
[ASP.NET MVC] 22. ASP.NET Core Identity 소개 https://www.youtube.com/watch?v=t9ApesVOalw
[ASP.NET MVC] 23. Identity 생성 테이블 PK 타입 변경하기 https://www.youtube.com/watch?v=JnA29XdZnxg
[ASP.NET MVC] 24. ASP.NET Core Identity 모델 클래스 설명 https://www.youtube.com/watch?v=DW7Sl9Q6HBA
[ASP.NET MVC] 25. AccountController 소스코드 분석하기 https://www.youtube.com/watch?v=_GZHPPdM3OQ
Chapter 6 - ASP.NET MVC
C# DB 통신
ADO.NET
- Winform, Classic ASP
Enterprise Library 5
- 쿼리문을 직접 작성 -> 값을 처리
- Logging
단점: 1,2의 경우쿼리문을 직접 작성으로 오류 발생의 소지가 높음.
ORM
- Java JPA를 기준으로 하이버네이트
- C# EntityFramework 1.0 ~ 7.0
- Mapper
게시판 프로젝트
준비물 : Asp.net MVC, MS SQL, EntityFramework
EntityFramework 1.0 ~ 6.0까지는 .net Framework (풀닷넷)에 사용 ASP.NET Core는 7.0부터 EntityFramework Core
ASP.NET Core 1.x EntityFramework Core 1.1
개발방식 EntityFramework
Database First 방식
- Database DBA(데이터베이스 관리자)
- 설계 완료, 물리적 데이터베이스도 모두 완성된 상태. => Database 기준으로 Appication 개발
Code First 방식
- Database 기준으로 Appication 개발 역으로 => Code -> Database 생성해 Appication 개발
MS SQL 2014, 2016
- SQL 엔진
- Management Studio 14, 16
MySQL 과 비교
- MySQL 엔진
- Workbench
MS SQL SA 비밀번호 설정 이유
- Web Server와 SQL Server가 다른 컴퓨터일 경우
http://db.example.com:1433
Chapter 7 - ASP.NET MVC
1. 프레임워크 업그레이드
- ASP.NET MVC Core 1.1 (NuGetPackage에서 업데이트, www.nuget.org, 메이븐리파지토리와 비슷 https://mvnrepository.com/)
2. EntityFramework Core 설치
Microsoft.EntityFramework core, Microsoft.EntityFramework core.Server, Microsoft.EntityFramework core.Tools 설치
CodeFirst 방식으로 Model Class -> DBContext -> 실제 테이블을 생성
- User 모델 -> 사용자
- Note 모델 -> 게시판
User
- 사용자 번호(PK)
- 사용자 이름
- 사용자 ID
- 사용자 Password
Note
- 게시물 번호(PK)
- 게시물 제목
- 게시물 내용
- 작성자 (숫자 - 사용자번호)
3. DBContext 생성 -> Table 생성할 수 있는 코드를 작성
DataContext 만듦
csharp
public class AspnetNoteDbContext : DbContext
{
public DbSet<User> Users { get; set; }
public DbSet<Note> Notes { get; set; }
}csharp
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
base.OnConfiguring(optionsBuilder);
}connectionstring https://www.connectionstrings.com/sql-server/
비주얼스튜디오의 상단 보기 > Server Explorer 사용해서
Data Source=(localdb)\v11.0;Initial Catalog=master;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False- 보기 > 다른 창 > 패키지 관리자 콘솔
add-migration FirstMigration
update-database4. DBContext -> 실제 테이블을 생성
- xml주석 사용방법
/// ctrl + 위, 아래- using 문에서
ctrl + .사용하지 않는 것은 제거 - 클래스 조인방법
public virtual, virtual을 권장함
Chapter 8
사용자 로그인, 회원가입
- 회원가입 -> 사용자 정보 입력 -> DB 저장.
- 로그인 -> 사용자 정보를 입력 -> 사용자 정보를 보유
spring security 예제와 같은 것
ASP.NET Identity(Security)
- 사용자 로그인(인증)
- 사용자 Role(Admin,User,Poweruser)
- SMS 인증, Email 인증
Session 이용한 로그인, 회원가입 구현
로그인 2가지 방법론
1. Session
- 웹 서버가 사용자 정보를 메모리에 담아놓아 보안성이 높다.(장점)
- 웹 서버 메모리 부하가 높아진다.(단점)
2. Cookie
- 웹 서버 로그인 -> 사용자 정보 -> 브라우저 전달 -> 쿠키로 저장
- 웹 서버의 부하가 낮아진다.(장점)
- 보안성이 낮아진다.(단점)
결론: Cookie
- Cookie를 암호화 -> 복호화 / 위변조의 위험
- SSL인증서를 사용하여 위변조의 위험을 막음
SSL
- 유료 100만원 20만원 (매년), 무료
GET : DB에서 받음 http://www.example.com/api/GetBookList?bookNo=1
POST : DB에 전달 http://www.example.com/PostUser
- AccountController.cs
- Register.cshtml
Chapter 9
.net core 2가지 트랙
1. LST (Long Term Support)
느리게 업그레이드 .net core
------------1------------1------------1------------1------------12. Current
빠른 업그레이드 .net core
----1----1----1----1----1----1----1----1----1Chapter 10 - 로그인
Linq, 매서드 체이닝 https://docs.microsoft.com/ko-kr/dotnet/csharp/linq/
람다식에서 A Go to B: u => u
메모리 누수를 방지하기위해서 == 사용하지 않기
csharp
//var user = db.Users.FirstOrDefault(u=>u.UserId == model.UserId && u.UserPassword == model.UserPassword);
var user = db.Users.FirstOrDefault(u => u.UserId.Equals(model.UserId) && u.UserPassword.Equals(model.UserPassword));로그인시 Validation Required가 다있어야 되므로 없어서 인증이 안됨
Model => 기본 엔티티 클래스
User
- UserNo
- UserName
- ID, Password
ViewModel -> 뷰(View)를 위한 모델
- MVC(Model, View, Controller)
- WPF(MVVM)
ModelState 상태 메시지 보기
asp.net core asp-validation-summary
https://docs.microsoft.com/ko-kr/aspnet/core/tutorials/first-mvc-app/validation?view=aspnetcore-2.1
Chapter 11
NuGet Package -> Microsoft.AspNetCore.Session 설치
ASP.NET MVC -> IIS(웹서버) = 아파치
- WebAPI 압축기능 이용시 둘다 설정해줘야함
ASP.NET Core -> 리눅스, 윈도우, MacOS
Startup.cs 에서 미들웨어 형태로 사용
csharp
services.AddSession();
app.UseSession();로그아웃 시 세션에서 지움
Chapter 12
게시판 리스트 출력
알트 + 쉬프트 아래쉬프트 + delete
Chapter 13 - 게시물
로우 12개 중에 col-lg-4해서 3등분
asp.net core HttpContext.Session
https://benjii.me/2016/07/using-sessions-and-httpcontext-in-aspnetcore-and-mvc-core/
Chapter 14 - 게시물 상세보기 페이지 만들기
http://www.example.com
http://www.example.com/{noteNo}
http://www.example.com/Note/Detail?noteNo=1Trumbowyg 자바스크립트 에디터
github javascript editor
Chapter 15
NPM Node Package Manager
Node.js
bower
프론트엔드 패키지 매니저
CLI (Command Line Interface)
trumbowyg 사용
https://alex-d.github.io/Trumbowyg/documentation/
Superscript: 위첨자
Chapter 16 - 자바스크립트 텍스트 에디어 이미지 업로드
ctor 탭 2번
@기호로 이거를 그대로 인식하도록 http://ko.cppreference.com/w/cpp/language/escape
@기호로 이거를 그대로 인식하도록
trumbowyg.upload.js의 파일 수정
- serverPath
- fileFieldName
https://alex-d.github.io/Trumbowyg/?utm_source=tool.lu
재정의
한글변환
비동기적 처리하는 Async
Chapter 17 - Enterprise Architecture C#
Enterprise Architecture
- 대형 솔루션, 프로그램 개발할 때 사용하는 프로젝트 구성 방식 - 큰 틀을 구성
- 다양한 플랫폼을 지원하는 재사용성이 높은 코드를 작성하는 방식
Presentation Layer : WPF, WinForm
Business Layer : Validation Check
Cache
- 목적: 자주 불러오는 데이터를 메모리에 담아서 출력하는 것
- 장점: 컴퓨팅 비용 감소, 데이터를 출력하는 속도가 증가
- 단점: 메모리를 많이 필요로 하게 됨
Data Access Layer : DB에 접근
Class Library를 사용하여 Business, Data Access layer를 만듦
DLL
클래스 라이브러리 종류
- .net Framework
- .net core
- .net Framework(portable) - Xamarin
- .net Standard
ASP.NET 닷넷 프레임워크 프로젝트이고 data 클래스 라이브러리 (닷넷 코어) 이면 접근이 안되는 경우도 있음
.NET STANDARD로 통합
IDataAccessLayer
각 Tier 별로 접근 순서
클라이언트 버튼 -> ASP.NET MVC 리스트 출력 호출 -> BLL -> IDAL -> DAL ( -> BLL -> MVC )
오라클로 변경시에는 Oracle.DAL 만 바꿈
Chapter 18
의존성 주입 (Dependency Injection)
프로그래밍에서 구성요소간의 의존 관계가 소스코드 내부가 아닌 외부의 설정파일 등을 통해 정의되게 하는 디자인 패턴
제어반전
IoC (Inversion of Control)
프로그래머가 작성한 프로그램이 재사용 라이브러리의 흐름제어를 받게되는 소프트웨어 디자인 패턴을 말한다.
IoC Container
객체를 프레임워크에서 간접적으로 생성, 소멸 시켜주는 컨테이너를 뜻함.
MVC 6 - 의존성 주입을 할 수 있는 3가지
services.AddSingleton<T>();- 웹사이트가 시작하면 웹사이트가 종료될 때까지 메모리 상에 유지되는 객체 주입services.AddScoped<T>();- 웹사이트가 시작되어 1번의 요청이 있을 때 메모리 상에 유지되는 객체 주입services.AddTransient<T>();- 웹사이트가 시작되어 각 요청마다 새롭게 생성되는 객체 주입
싱글턴 패턴
1번 사용자 -> UserBll 사용하면 계속 남아 있음
AddScoped
https://docs.microsoft.com/ko-kr/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-2.1
Chapter 19
Unity Container
https://docs.microsoft.com/en-us/previous-versions/msp-n-p/ff647202(v=pandp.10)
IoC Container C#
누겟패키지 설치: Unity.Mvc
단축키:
콘트롤 + home누르면 맨위로 올라감콘트롤 + tab콘트롤 + 위 아래- 탭에 휠누르면 닫힘
Chapter 20
appsettings.json을 통한 ConnecitionString 처리
리샵퍼사용하면 interface 원하는 순서로 바꿀수있음
DataAccessLayer에서 누겟패키지 두개 추가
- Microsoft.EntityFrameworkCore
- Microsoft.EntityFrameworkCore.SqlServer
connectionstring
https://www.connectionstrings.com/sql-server/
패키지 매니저 콘솔에서 기본프로젝트는 Note.DAL로
누겟 패키지 Microsoft.EntityFrameworkCore.Tools
add-migration NoteDb
update-databaseconnectionstring위치를 appsettings.json에 입력
Startup.cs
Chapter 21
스레드
https://ko.wikipedia.org/wiki/스레드_(컴퓨팅)
Winform, WPF Thread
- UI Thread
- Background Thread
- for, foreach, 파일입출력
동기적 프로그래밍
Method1(); 3초
Method2(); 3초
Method3(); 3초
- 총 9초 소요비동기적 프로그래밍
Method1(); 3초
Method2(); 3초
Method3(); 3초
- 총 3초 소요C# 비동기적 프로그래밍을 위한 키워드
async,await,Task,Task<T>- C# 5.0, 닷넷 프레임워크 4.5
테스트 방법 - 전통적인 방식
csharp
Stopwatch watch = new Stopwatch();
watch.Start();
var test1 = Test1Async();
var test2 = Test2Async();
var test3 = Test3Async();
var result1 = await test1;
var result2 = await test2;
var result3 = await test3;
watch.Stop();
var result = watch.ElapsedMilliseconds;테스트 방법 - 새로운 방식 Visual Studio Diagnostics Tools
비동기적으로 처리하는 것이 과연 성능상 좋아진 것 일까?
성능상 좋아진 것이 아니라 남는 것을 사용하는 것
Ctrl + mm누르면 최소화됨
Chapter 22
ASP.NET Core Identity
- 로그인, 로그아웃, 개별 인증(관리자, 일반사용자)
- 일반 사용자(나이가 19세 이상)
Identity 테이블 구조
dbo.AspNetUsers=> ApplicationUser (유저 클래스)- ID, 비밀번호, 사용자 이름
dbo.AspNetRoles=> ApplicationRole (룰 클래스)- 이 웹사이트에 회원 분류
- 슈퍼 관리자, 관리자, 특별 사용자, 일반 사용자
dbo.AspNetUserRoles- 1번 사용자(PK 1) -> 관리자(1)
- 2번 사용자(PK 2) -> 일반 사용자(4)
dbo.AspNetClaims=> 5명의 사용자 -> 일반 사용자(Role)- 2명이 나이 20세 미만 -> 20세 미만은 특정 게시판 진입금지 Age 20
[HttpGet, Authorize(Claims ... Age >20]
dbo.AspNetRoleClaims- 관리자 - 1등, 2등, 3등
__EFMigrationsHistory는 마이그레이션 이력관리dbo.AspNetUserLogins=> 외부로그인 Oauth1.0 / 2.0dbo.AspNetUserTokens=> 외부로그인 관련
Chapter 23
Identity 생성 테이블 PK 타입 변경하기
ApplicationDbContext 설명
저같은 경우는 AccountController 랑 ManageController부분에 메일발송부분 user.Id 이게 숫자형으로 변경되어서 .ToString() 해서 해결하고 startup.cs 는:
csharp
services.AddIdentity<ApplicationUser, ApplicationRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();