[24.08.26] SpringMVC_JWT 인증 처리

ANGELA·2025년 1월 8일

[KB]학습내용정리

목록 보기
37/57

프로젝트 Remind

1. 순서

생성

  • 백 + 프론트 연동용 폴더 생성
  • 톰캣 컨피그 확인
  • 톰캣 프로젝트 추가
  • 콘텍스트 홈 (/)
  • 어노테이션 프로세싱

세팅

  • 자바버전, 그레이들 변수 추가
  • 스프링, AOP 추가
  • 로그 라이브러리, 한글 처리 라이브러리, 롬복 라이브러리(어노테이션으로 생성자, getter/setter 정의), jackson 추가
  • 테스트용 롬복
  • 테스트(자바를 위한)에는 spring이 포함되지 않기에, spring test를 추가
  • DB용 라이브러리 추가
  • DB가 정상적인지 먼저 확인 (db가 잘 있는지, 사용자로 들어가서 connection을 확인해보기)
    mybatis, hikari(DB 요청을 위해 따로 빼놓는 특정 스레드, connection pool 세팅) 추가
  • 라이브러리 다운이 잘 되었는지 확인(build)
  • DB를 확인하기 위해 log4j와 jdbc를 연동
  • 보안용 Security tag, config, core, web용 라이브러리 추가
  • 자바 웹토큰(JWT) 추가

자바 main(testx)을 위한 리소스

application.properties 설정

  • 꺼내오는 annotation: @Value
  • JDBC에 국한되지 않은 환경변수 파일임
    log4j.xml 로그 설정
  • 왜 로그가 중요한가? 정확한 일시에 요청과 응답에 대한 기록이 남음, 어느 시점에 어떤 원인으로 프로그램이 죽었는지 파악할 수 있음 등등
  • console 세팅, 패턴 레이아웃 / 어떤 범위(level)로 볼 것인지
  • root logger: 없으면 에러, 기본 밸류를 설정하는 역할
  • log4j: 전체 로그 환경 설정, log4j2: jdbc용 로그 환경 설정
    mybatis 설정
  • mapper를 쓰면 쿼리 매핑이 잘 됨, 추가적인 확장 기능(VO들(domain 패키지)을 별칭으로 불러오기 위한 typeAliases 등)이 들어감.
    톰캣 돌려보고 문제 없는지 확인

Servlet을 통한 Spring 셋업 - config 패키지

  • rootConfig
    @Configuration: 앱이 시작될 때 가장 먼저 불러와지는 환경설정 bean들
    @PropertySource, @Value -> 환경변수를 불러와 쓸 수 있음
    application Context (Autowired 됨)
    dataSource에 히카리 - connection pool까지 함께 세팅하기 위함
    sqlSessionFactory - mybatis를 위한, 기본적으로 jdbc만 쓰는데, mybatis용을 위해 빈 설정
    transactionManager
    spring과 db의 연동을 위한 rootConfig (웹에 대한 config 없이, db 연동만으로 앱을 실행할 수 있음, servlet이 기본적으로 동작하고, spring이 있으면서 jdbc도 있으므로 바로 자바 app으로 사용 가능함)

cf. autowired
web application context는 application context이므로, servlet만 돌아가고 있어서(라우팅X)

  • ServletConfig
    web mvc를 쓰기 시작함. @EnableWebMvc
    @ComponentScan - component는 web mvc에서 사용하는 bean임. (exception, controller를 스캔함)
    viewController - 루트 밑 모든 뷰들을 라우팅.
    addResourceHandlers - 뷰 스캔(뷰 컨트롤러)에서 제외되는 파일들을 제외해주는 역할. 라우팅에서 제외해서 직접 접근을 막음.
    spring에서 스캔하는 대상은 bean, component, config // web config 해주지 않고 servelt만 하는 상황에서는 ??????

  • WebConfig
    security config 연결
    파일 업로드 설정 -> customizeRegistration (커스터마이즈 기능으로 multipartConfig (파일 업로드)를 추가함)

exception

CommonExceptionAdvice

  • @ControllerAdvice: AOP(횡단적이되 범위 지정 가능, 반드시 모든 joinpoint에 꽂힐 필요는 없음. advice/filter 클래스로 많이 만듦)가 controller 영역까지 동작하게 함
    cf. semantic component: 의미를 지정한 component, ex. controller component
  • exception scan이 되는 순간 advice로서 동작하게 됨. componentScan이 servlet config에 있음.

board

무엇을 복사해서 넣었는지 생각하기
BoardController

  • 역할1: get List 불러오기

BoardMapper

  • db와 가장 밀접한 관계
  • mybatis
  • db로서 어떤 객체를 가져와야 할지가 에러 -> db에 있는 하나의 row가 자바의 하나의 객체에 대응함. = VO
    VO를 실제로 만들어주기 위해서 domain package에서 BoardVO와 BoardAttachmentVO를 가져옴 (common util에서 업로드 파일 기능 & 업로드파일네임 기능 & webConfig에서 multipart 기능 추가)
    어떤 VO를 쓸지 정해줬으므로, mybatis를 실제로 쿼리문을 저장할 때 2가지 방식이 있음.
  • xml 파일 (resource 폴더 안의 org 폴더 안의 scoula 폴더 안의 board 폴더 안의 mapper 폴더 안에 들어있음) -- copy로 경로 확인 가능
    select, delete 등 태그들은 mybatis에서 정의되어 있는 태그이므로 다른 것을 쓰면 안됨
  • mybatis 어노테이션 (@Select 등 --> 매퍼가 됐기 때문에 쓸 수 있는 것)
  • resultType으로 VO 직접 작성 가능. mybatis config에서 typeAliase로 지정해줬기 때문임.
    파라미터 타입, 리설트 타입 등이 적혀있음.
  • db와 테이블이 잘 있는지 확인해주기

service 레이어에서 쓸 board.DTO

VO: db 접근 객체 / DTO: 레이어 간 transfer해주는 객체
of 메소드

  • 다른 타입을 이 타입으로 변환할 때 자주 씀
  • VO -> DTO로 변환하는 of 메소드를 만들어줌
  • VO에서 특정 컬럼을 추출해서 DTO로 만듦. row에 있는 컬럼이 5000개라고 할 때 7개만 뽑아 쓸 수도 있는 것.

board.service

BoardService

  • 인터페이스
  • service에서 쓴 결과를 controller로 한 번 더 올려줄 때 원래는 또다른 DTO를 만들어줘야 하지만(관행적),
    우리가 만드는 입력 출력 모두 dto이기 때문에 같은 DTO를 사용한 것임
    BoardServiceImpl
  • 인터페이스를 오버라이드해서 실제로 사용

controller

servlet config에서 componentscan에서 board controller가 잘 스캔되었는지 확인해야 함.

security.config

permitAll() 모두 허용

profile
혼자 보려고 만든 기록장 | 또또는 귀여워 🐈‍⬛

0개의 댓글