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

허준기·2024년 2월 15일
0

BCSD

목록 보기
1/9

서블릿

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

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

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
나는 허준기

0개의 댓글

관련 채용 정보