Skip to content

ASP.NET MVC

강의 목록


Chapter 6 - ASP.NET MVC

C# DB 통신

  1. ADO.NET

    • Winform, Classic ASP
  2. 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

  1. Database First 방식

    • Database DBA(데이터베이스 관리자)
    • 설계 완료, 물리적 데이터베이스도 모두 완성된 상태. => Database 기준으로 Appication 개발
  2. Code First 방식

    • Database 기준으로 Appication 개발 역으로 => Code -> Database 생성해 Appication 개발

MS SQL 2014, 2016

  1. SQL 엔진
  2. Management Studio 14, 16

MySQL 과 비교

  1. MySQL 엔진
  2. Workbench

MS SQL SA 비밀번호 설정 이유

  1. 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);
}
  1. connectionstring https://www.connectionstrings.com/sql-server/

  2. 비주얼스튜디오의 상단 보기 > Server Explorer 사용해서

Data Source=(localdb)\v11.0;Initial Catalog=master;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False
  1. 보기 > 다른 창 > 패키지 관리자 콘솔
add-migration FirstMigration
update-database

4. 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

  • 웹 서버가 사용자 정보를 메모리에 담아놓아 보안성이 높다.(장점)
  • 웹 서버 메모리 부하가 높아진다.(단점)
  • 웹 서버 로그인 -> 사용자 정보 -> 브라우저 전달 -> 쿠키로 저장
  • 웹 서버의 부하가 낮아진다.(장점)
  • 보안성이 낮아진다.(단점)
  • 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------------1

2. Current

빠른 업그레이드 .net core

----1----1----1----1----1----1----1----1----1

Chapter 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=1

Trumbowyg 자바스크립트 에디터

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

https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity?view=aspnetcore-2.1&tabs=visual-studio%2Caspnetcore2x


Chapter 17 - Enterprise Architecture C#

Enterprise Architecture

  1. 대형 솔루션, 프로그램 개발할 때 사용하는 프로젝트 구성 방식 - 큰 틀을 구성
  2. 다양한 플랫폼을 지원하는 재사용성이 높은 코드를 작성하는 방식

Presentation Layer : WPF, WinForm

Business Layer : Validation Check

Cache

  • 목적: 자주 불러오는 데이터를 메모리에 담아서 출력하는 것
  • 장점: 컴퓨팅 비용 감소, 데이터를 출력하는 속도가 증가
  • 단점: 메모리를 많이 필요로 하게 됨

Data Access Layer : DB에 접근

Class Library를 사용하여 Business, Data Access layer를 만듦

DLL

클래스 라이브러리 종류

  1. .net Framework
  2. .net core
  3. .net Framework(portable) - Xamarin
  4. .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가지

  1. services.AddSingleton<T>(); - 웹사이트가 시작하면 웹사이트가 종료될 때까지 메모리 상에 유지되는 객체 주입
  2. services.AddScoped<T>(); - 웹사이트가 시작되어 1번의 요청이 있을 때 메모리 상에 유지되는 객체 주입
  3. 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-database

connectionstring위치를 appsettings.json에 입력

Startup.cs


Chapter 21

스레드

https://ko.wikipedia.org/wiki/스레드_(컴퓨팅)

Winform, WPF Thread

  1. UI Thread
  2. Background Thread
  • for, foreach, 파일입출력

동기적 프로그래밍

Method1();    3초
Method2();    3초
Method3();    3초
- 총 9초 소요

비동기적 프로그래밍

Method1();    3초
Method2();    3초
Method3();    3초
- 총 3초 소요

C# 비동기적 프로그래밍을 위한 키워드

  1. 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 테이블 구조

  1. dbo.AspNetUsers => ApplicationUser (유저 클래스)

    • ID, 비밀번호, 사용자 이름
  2. dbo.AspNetRoles => ApplicationRole (룰 클래스)

    • 이 웹사이트에 회원 분류
    • 슈퍼 관리자, 관리자, 특별 사용자, 일반 사용자
  3. dbo.AspNetUserRoles

    • 1번 사용자(PK 1) -> 관리자(1)
    • 2번 사용자(PK 2) -> 일반 사용자(4)
  4. dbo.AspNetClaims => 5명의 사용자 -> 일반 사용자(Role)

    • 2명이 나이 20세 미만 -> 20세 미만은 특정 게시판 진입금지 Age 20
    • [HttpGet, Authorize(Claims ... Age >20]
  5. dbo.AspNetRoleClaims

    • 관리자 - 1등, 2등, 3등
  6. __EFMigrationsHistory 는 마이그레이션 이력관리

  7. dbo.AspNetUserLogins => 외부로그인 Oauth1.0 / 2.0

  8. dbo.AspNetUserTokens => 외부로그인 관련


Chapter 23

Identity 생성 테이블 PK 타입 변경하기

ApplicationDbContext 설명

저같은 경우는 AccountController 랑 ManageController부분에 메일발송부분 user.Id 이게 숫자형으로 변경되어서 .ToString() 해서 해결하고 startup.cs 는:

csharp
services.AddIdentity<ApplicationUser, ApplicationRole>()
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultTokenProviders();

https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity-primary-key-configuration?tabs=aspnetcore2x&view=aspnetcore-2.1