동아리 회고 준비하면서 공부한 키워드

허준기·2024년 2월 15일
0

BCSD

목록 보기
1/8
post-custom-banner

서블릿

처음 웹서버에 프로그램을 붙여 동적인 페이지를 만드는 프로그램

  • 서블릿을 통해 웹요청을 다루게 되면 개발자들이 비즈니스 로직에 더욱 집중할 수 있게 됨
  • 웹 요청을 처리해줌
  • 서비스 메서드를 재정의해서 처리방법을 지정해줌
    - 서블릿 컨테이너 (설정파일에 어떤 서블릿과 매칭되는지 정의함) --> 서블릿의 생명주기를 관리해주는 객체
    - 사용자 요청이 들어오면 해당 요청과 매핑된 서블릿을 찾아서 동작
    - 싱글톤으로 관리 - 다음번 같은 요청이 들어왔을 때 재호출해서 재사용

Dispatcher Servlet

https://www.youtube.com/watch?v=calGCwG_B4Y&t=47s

  • 모든 요청을 받는 전면 컨트롤러
  • 모든 요청을 처리해줌

동작 순서

  • 요청이 들어옴 - Dispatcher Servlet이 처리 - Handler Mapping 으로 요청을 처리할 컨트롤러 반환 - Handler Adapter - 해당 컨트롤러의 메서드 호출 - 처리 로직 수행 - 처리결과 Model/View 객체로 변환 - Dispatcher Servlet으로 넘김 - View Resolver를 이용해서 View를 찾거나 생성 - 그렇게 생긴 View에 모델로 들어온 데이터를 넣어줌 - 응답결과 생성 요청 - 데이터를 담은 출력파일로 응답

Argument Resolver

https://velog.io/@junho5336/%EC%BB%A8%ED%8A%B8%EB%A1%A4%EB%9F%AC%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EA%B0%92%EC%9D%84-%EB%B0%94%EC%9D%B8%EB%94%A9%ED%95%A0%EA%B9%8C

@PathVariable

  • 리소스 경로에 식별자를 넣어서 동적으로 URL에 정보를 담을 수 있
  • URL 경로의 중괄호 { }안쪽에 변수를 담고, 그 변수를 @PathVariable("")로 받아서 사용할 수 있음

@Component

  • 해당 어노테이션이 붙은 클래스를 빈으로 등록하라고 알려줌
  • 자동으로 클래스의 인스턴스를 생성하고 종속성을 포함하여 각종 생명주기를 관리해줌
  • 이로 인해 개발자는 객체 생성, 관리에 대한 걱정이 줄고 비즈니스 로직 자체에 집중할 수 있

@Request

클라이언트에서 받은 요청을 객체로 바인딩하기 위해 사용하는 방법

Body

클라이언트가 전송하는 Json 형태의 HTTP Body 내용을 Java 객체로 변환

  • Body가 존재하지 않는 HTTP GET 메서드에 @RequestBody를 사용할 경우 에러 발생
  • Reflection을 이용해 값을 할당
  • Json 기반

Param

1개의 HTTP 요청 파라미터를 받기 위해 사용

  • @RequestParam이 쓰고있는 메서드의 변수로 매핑
  • 필수여부가 true이기 때문에 기본적으로 해당 파라미터가 전송되어야 함 --> 전송 안되면 400 에러

@RestController

@Controller와 다르게 @RestController는 리턴 값에 자동으로 @ResponseBody가 붙게 되어 별도 어노테이션을 명시해주지 않아도 HTTP 응답데이터(body)에 자바 객체가 매핑되어 전달

URI(Uniform Resource Identifier)

리소스가 있는 위치를 지정

HTTP(HyperText Transfer Protocol)

하이퍼텍스트 링크를 사용해 웹 페이지를 로드하는 데 사용
네트워크 장치 간에 정보를 전송하도록 설계
컴퓨터끼리 소통을 할 때 필요한 프로토콜

Builder

  • 장점
    - 필요한 데이터만 설정해줄 수 있다
    - 코드가 유연해질 수 있다 - 기존 코드에 영향을 주지 않아도 된다
    - 가독성을 높일 수 있다 - 기존의 생성자로 객체를 생성하면 매개변수의 의미를 알기 어렵지만 빌더 패턴을 이용하면 쉽게 알 수 있다
    - 변경 가능성을 최소화할 수 있다

트랜잭션

  • 원자성 (Atomicity)
    - 연산은 모두 DB에 반영되든지 아니면 전혀 반영되지 않아야 함
    - 명령은 반드시 완벽하게 수행되어야 함
  • 일관성(Consistency)
    - 트랜잭션이 실행되기 전과 후에 모두 유효한 상태여야 함
  • 격리성(Isolation)
    - 각 트랜잭션이 격리되어 다른 트랜잭션의 결과에 영향을 미치지 않아야 함
  • 영속성(Durability)
    - 커밋 되면 DB에 대한 변경 내용이 영구적으로 유지되어야 함

메서드가 정상 종료되면 트랜잭션을 commit 하고, 예외가 발생하면 트랜잭션을 rollback

동작원리

  • @Transactional이 선언되면 해당 클래스에 트랜잭션이 적용된 프록시 객체 생성

주의할 점

  • public 메서드여야함 --> 프록시 객체로 외부에서 접근 가능한 인터페이스 제공
  • 다른 AOP기능과 충돌 고려 --> @Order을 이용해 순서 정하기
  • Service 계층에서 사용

JPA(Java Persistence API)

자바의 객체와 RDB를 매핑해주는 기술

  • 구현체가 없음

  • 애플리케이션과 JDBC 사이에서 동작

  • JPA 내부에서 JDBC API를 사용해 SQL을 호출하고 DB와 통신

  • 사용 이유
    - 생산성 : 개발자가 반복적인 코드를 작성할 필요가 없음
    - 유지보수 : 필드를 하나만 추가해도 관련된 SQL과 JDBC 코드를 전부 수행해야 했지만 JPA는 대신 처리해줘서 유지보수에 좋음
    - 패러다임의 불일치 해결 : 연관 객체 사용 시점에 SQL을 전달할 수 있고, 같은 트랜잭션 내에서 조회할 때 동일성 보장
    - 성능 : 애플리케이션과 DB 사이에서 성능 최적화 기회 제공
    - 트랜잭션을 commit하기 전까지 메모리에 쌓고 한번에 SQL 전송

JSON(JavaScript Object Notation)

데이터를 저장하거나 전송할 때 많이 사용되는 경량의 데이터 교환 형식

  • 이해가 쉬움, 용량이 작음 --> 데이터 전송에 많이 사용
  • 데이터 포맷일 뿐. 데이터를 표시하는 표현 방법
  • key, value가 있음

Data Binding

사용자가 입력한 값을 어플리케이션 도메인 객체에 동적으로 할당

주로 문자열을 입력하는데, int형으로 받아야 할 수도 있고, Date나 객체 그 자체로 받아야하는 경우도 있는데, 그 문자열을 객체가 가지고 있는 다양한 property 타입으로 변환해주는 기능입니다.

인증, 인가

인증

특정 사용자인지 식별 가능 --> 로그인

인가

특정 권한을 가진 사용자만 특정 기능에 접근 --> 접근 제한

암호화

단방향 암호화

개발자는 로그인을 요청한 사용자가 해당 사용자가 맞는지 확인할 수 있어야 하지만 DB에 저장된 password는 식별할 수 없어야 함

  • 레인보우 테이블로 대조해서 해킹할 수도 있음

해시

  • 데이터들을 일정한 길이의 문자열로 변환
  • 복호화 불가능

salting

데이터에 salting 데이터를 붙여 암호화하여 공격자가 유추하기 힘들게 함

  • A + salting -> A'

BCrypt

  • 랜덤 salt를 만들어 패스워드 암호화
  • 랜덤 salt로 인해 같은 문자열로부터 서로 다른 암호화된 데이터 반환(길이 60으로 일정)
  • 사용자마다 다른 salt값 유지 가능 -> 사용자별 DB에 저장

HTTPS(HTTP Secure)

HTTP 통신 과정에서 전달하는 데이터에 양방향 암호화 추가

HTTP

무상태(stateless)라서 서버가 클라이언트의 이전 상태 보존 X -> 사용자의 로그인 여부 기억 못함

401(UnAuthorized)

  • 클라이언트가 인증되지 않아 정상적으로 요청을 처리할 수 없음
  • ex) 로그인을 안하고 특정 리소스를 요청할 때

403(Forbidden)

  • 인증 자격은 있지만 접근 자격이 없는 경우
  • ex) 일반 사용자가 로그인을 하여 인증은 되었지만 접근 권한이 없는 admin등급의 리소스를 요청
    - 주의점
    - 해당 리소스의 존재여부를 숨기기 위해 404를 사용하는 것이 적합할수도

쿠키

클라이언트 로컬에 저장되는 데이터 파일
HTTP Header에 쿠키를 포함시켜 응답

  • 단점
    - 쿠키에 대한 정보를 매 Http Request 시에 보냄
    - 트래픽 증가
    - 공격자의 쿠키 탈취 시 위험

세션

사용자 정보 파일을 서버 측에서 관리

  • 서버에서 클라이언트 측의 HTTp Session id로 구별
  • 유효시간 설정 가능

JWT(Json Web Token)

Json 기반의 Access Token을 생성하는 인터네 표준 기술

  • 비상태 프로토콜

  • 헤더, 내용(payload), 서명(signature)로 구성

  • 장점
    - 데이터 위변조 방지
    - 인증에 필요한 정보를 담고 있어서 저장소 없어도 됨
    - 확장성 좋음
    - DB 조회 필요없

  • 단점
    - 정보를 암호화하지 않음
    - 민감한 정보를 담지 않음
    - 상태를 관리하지 않음
    - 공격자가 탈취했을 때 방지할 대책이 없다
    - 유효기간 반드시 설

헤더

  • type : JWT
  • alg : signature 부분의 값을 만드는데 사용될 알고리즘 지정

내용(payload)

json형식으로 여러 정보가 담겨있음

서명(signature)

Header의 인코딩 값과 Payload을 합친 후, secret key로 해쉬해서 생성

profile
나는 허준기
post-custom-banner

0개의 댓글