Develop

31일차_ Spring-MyBatis 실습정리 : 회원가입, 로그인, CORS, 파일처리, Mock 테스트, 보안 설정 본문

백엔드/KDT_Programmers

31일차_ Spring-MyBatis 실습정리 : 회원가입, 로그인, CORS, 파일처리, Mock 테스트, 보안 설정

230801 2025. 4. 16. 03:16

안녕하세요  .ᐟ

 

오늘은 4/15(화) 데브코스 31일차(7주 2일차) 입니다.

 

스프링과 마이바티스를 이용해서 로그인과 회원가입 기능을 구현해보면서,

인증처리, 유효성검증, CORS, 보안설정, 테스트 코드 작성까지 실습을 진행했습니다.

 

이걸 배워서 내가 적용할 수 있을까..? 라는 말하는 감자 마인드가...드네요 🫣 

 

 


 

1. 로그인 기능 개발

Signin 기능 구현

  • 사용자 입력 아이디/비밀번호를 기반으로 로그인 처리
  • 로그인 실패 시: 에러 메시지 응답
  • 로그인 성공 시: 세션 또는 토큰 기반 인증 처리

 


2. CORS 정책과 해결 방법

CORS란?

  • 브라우저의 보안 정책 중 하나로, 다른 origin(도메인/포트)에서의 요청을 제한함
  • 특히 POST 요청 시 자주 문제 발생

 

CORS 설정 방법

  • @CrossOrigin
@CrossOrigin(origins = "http://localhost:63342", allowCredentials = "true")

 

  • origins: 허용할 Origin을 명시 (localhost:63342)
    • 해당 Origin의 경로(/member/info 등)는 허용됨
  • allowCredentials = "true": 쿠키 및 인증 헤더 포함 요청 허용

 

CORS 정책 이슈 해결법

  • 미 설정 시 tag 기반 요청(form, a, img 등)은 CORS를 우회하여 CSRF 공격 가능
  1. 프록시 서버 이용 (개발용)
    • 클라이언트 → 프록시 서버 → 실제 서버
    • 다른 origin처럼 보이지 않게 처리
  2. Spring Security 사용 (권장)
    • 추후 보안 설정을 통해 세밀하게 제어 가능

 


3. 회원가입 및 아이디 검증 기능

아이디 중복 체크

  • 기존: 잘못된 경로 메시지 반환
  • 개선: 아이디/비밀번호 검증용 EndPoint 추가
  • 개선: 비동기 처리로 사용 가능한 아이디인지 사전 확인

 

회원가입 시 유효성 검증 흐름

  • Controller에서 @NotBlank, @Size, @Email 등으로 기본 검증
  • DTO로 변환 후 서비스로 전달 -> Service에서 중복 아이디 확인
    • 존재할 경우 CommonException 발생
    • 존재하지 않으면 insertInfo()로 저장
  • @Transactional로 트랜잭션 처리

 


4. 파일 업로드 및 표시

DB에 파일 저장

  • 파일 업로드 시 FileUtil 활용
  • Materialize CSS의 M.AutoInit()으로 UI 자동 초기화

파일 조회

  • DB에서 썸네일 이미지 경로를 불러와 책 목록 페이지에 출력

 


5. 무한 스크롤 구현 (JavaScript)

IntersectionObserver 사용

  • 특정 요소가 화면(Viewport)에 진입했는지 감지
  • 감지되면 Ajax 요청으로 다음 데이터 자동 로드
  • 참고: MDN IntersectionObserver

 


6. 단위 테스트와 Mock 객체

Mockito 활용 테스트 작성

  • @Mock
    • 테스트 대상이 의존하는 객체
  • @InjectMocks
    • 테스트 대상 객체

 

테스트 흐름

  • given -> when -> then
    • given: Mock 객체 동작 정의
    • when: 테스트 실행
    • then: 결과 검증
    • willAnswer: 특정 조건 하에 Mock 객체 응답 설정 가능

 

기타

  • 메이븐은 테스트 케이스 중 하나라도 실패하면 전체 빌드 취소
  • 실제 DB, SpringContext 없이도 서비스 로직만 테스트 가능

 


 

7. Spring Security 기본 개념 실습

  • 인증이 필요 없는 페이지필요한 페이지를 분리 가능
  • 사용자 아이디 유효성 검증을 검증용 EndPoint로 분리하여 처리 가능
  • 엔드포인트를 만들어 태워보는 연습을 통해 보안 및 접근 제어에 익숙해질 수 있음
  • DTO를 우리가 원하는 형태로 반환 가능 (1급 객체처럼 다룰 수 있음)

 


오늘의 질문 

 

Populator

Populator는 객체에 값을 자동으로 채워주는 유틸리티 도구로,

주로 테스트나 데이터 변환 작업에서 많이 활용된다.

 

1. 더미 데이터 자동 생성

  • 테스트나 개발 중 필요한 **가짜 데이터(Fake Data)**를 빠르게 생성할 수 있음
  • 대표적인 라이브러리: DataPopulator, Podam, jFairy

2. 빈 필드 자동 채우기

  • 리플렉션 기반으로 객체의 빈 필드에 값을 자동으로 주입
  • 예: User 객체의 이름, 이메일 등 자동 생성 및 채움

3. DTO → 엔티티 값 복사 (유사 기능)

Populator의 기능과 비슷하게,

DTO ↔ 엔티티 변환에는 다음과 같은 유틸리티도 자주 사용된다.

 

  • ModelMapper
  • BeanUtils.copyProperties()

 

이들은 Populator처럼 객체 간 필드 값을 복사할 수 있지만,

직접 데이터는 생성하지 않고, 기존 값만 복사하는 데 사용된다.

 

 

그럼 오늘도 수고하셨습니다!

감사합니다~

  •