Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
Tags
- CS스터디
- zsh
- 데이크스트라
- 인프런
- 분할정복 방법
- 터미널
- 네트워킹데이
- zsh theme
- 스터디2기
- 오블완
- spring boot
- MySQL
- 순차탐색
- 욕심쟁이 방법
- 오일러 경로
- Less
- 맥
- mysql 표 출력
- VI
- 동적 프로그래밍 방법
- mysql 표
- 인프런워밍업클럽
- cs
- mycli
- 이진탐색
- Pager
- oh-my-zsh
- 티스토리챌린지
- table status
- 알고리즘
Archives
- Today
- Total
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 공격 가능
- 프록시 서버 이용 (개발용)
- 클라이언트 → 프록시 서버 → 실제 서버
- 다른 origin처럼 보이지 않게 처리
- 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처럼 객체 간 필드 값을 복사할 수 있지만,
직접 데이터는 생성하지 않고, 기존 값만 복사하는 데 사용된다.
그럼 오늘도 수고하셨습니다!
감사합니다~
'백엔드 > KDT_Programmers' 카테고리의 다른 글
| 33일차_Spring Boot, Thymeleaf, JPA, JPQL (0) | 2025.04.21 |
|---|---|
| 32일차_Spring-security 인증/인가 실습 (0) | 2025.04.17 |
| 30일차_Spring-MyBatis 실습 정리: 테스트 코드, 매핑, 회원가입 구현 (0) | 2025.04.16 |
| 29일차_Spring-MyBatis 초기 설정 (0) | 2025.04.12 |
| 28일차_Spring MVC(동작원리, 처리흐름), Logback, Lombok (0) | 2025.04.11 |