프로젝트 21

CRUD를 분석해보자 (1) - 게시글 생성 API

이 포스팅을 쓴 목적은 DTO의 구조와 API 호출을 파악하기 위함입니다. (넘나리 어려움) 예전에 했던 건데 왜 봐도봐도 새롭지;;; (익숙해 질 때까지 반복만이 살 길이다.) 이번 시리즈의 목표는 기본적인 게시판 CRUD 동작 과정을 완벽히(?) 이해하는 것입니다! ✔️ 요구사항 분석 게시판 기능 게시글 조회 게시글 등록 게시글 수정 게시글 삭제 ✔️ 게시글 등록 1. domain 패키지를 만든다. 도메인이란, 게시글, 댓글, 회원, 정산, 결제 등 소프트웨어에 대한 요구사항 혹은 문제 영역이다. 2. domian 패키지에 posts 패키지와 Post 클래스를 만든다. 이렇게 패키지 구조가 나옵니다. 저는 저렇게 계층 구조로 나타내는 게 편하더라구요! src/main/java/com/testbook/..

프로젝트 2023.02.11

Spring Security를 이용하여 로그인을 구현해보자

UserDetailService UserDetailService 인터페이스는 DB에서 유저 정보를 가져오는 역할을 한다. UserDetailsService는 DaoAuthenticationProvider와 협력하는 인터페이스이다. DaoAuthenticationProvider는 요청받은 유저의 ID, Password와 저장된 ID, Password의 검증하는 책임을 가지고 옴. 저장된 ID, Password를 갖고오기 위해 UserDetailsService와 협력한다. UserDetailsService 인터페이스 public interface UserDetailsService { UserDetails loadUserByUsername(String username) throws UsernameNotFoun..

프로젝트 2023.01.26

'도대체 DTO를 왜 만드는 것인가'에 대한 고찰

어떤 카테고리로 분류할지 고민이 된다. [Spring/그 외] 카테고리에 해야할지, [프로젝트] 카테고리에 해야할지, [생각들] 카테고리에 해야할지. 일단 [생각들] 카테고리에 분류했다. 결국 [프로젝트] 카테고리로 옮겼다. 각설하고. MySQL을 알게되니, MyBatis를 알게되고 MyBatis를 알게되니, JPA를 알게되고 JPA를 알게되니, TestCode를 알게되고 TestCode를 알게되니 DTO를 알게되었다. 파도파도 끝이 없는 코딩의 세계. (DTO 정리만 벌써 3번째인 것 같음;;) DTO가 정확히 뭘 의미하는 걸까? DTO를 도대체 "왜" 쓰는 걸까? 왜?왜?왜?왜?왜?왜에에에에에ㅔㅔㅔ에???????????????? DTO란? DTO(Data Transfer Object)는 프로세스 간 ..

프로젝트 2023.01.25

[예외 처리] 회원가입 Custom Exception을 해보자

회원가입을 할 때 생길 수 있는 예외들에는 뭐가 있을까? Custom Exception을 적용시키지 않았던 이 편에 이어서... 기존에 작성했던 예외 처리 코드를 조금 바꿔보았다. Custom Exception을 해보았다. 음... 어찌저찌 테스트 통과하긴 하는데, 문제는, 내가 짠 테스트코드가 틀린 로직일 수도 있다ㅋㅋㅠ 근데 일단 통과는 함... 원래 통과 못했는데, 이것저것 바꾸다보니 됐음. 암튼 회원 이름이 겹치는 중복 회원가입 상황에 대한 예외처리를 해보았다. exception 패키지를 생성한다. 그리고 그 안에 RuntimeException을 상속받는 AppException 클래스를 생성한다. [AppException.java] import lombok.AllArgsConstructor; im..

프로젝트 2023.01.19

프로젝트 진행 중 (2) - JPA 연결

📌 요약 드디어 JPA 연결에 성공했다..! JPA를 이용한 회원가입 성공 하지만 Spring Sequrity로 해야하기 때문에 다시 처음부터 해야 함..ㅎ; 드디어 JPA로 MySQL를 연결하는 데 성공했다..! 일단 JPA 디렉토리 구조가 기존 mybatis를 사용할 때는, controller - service(iml) - dao(mapper) JPA는, Controller - service - Repository 라고 한다. 출처는 여기다! 그리고 회원가입 실습은 이 블로그를 보고 성공했다! 감사함다 선생님... 또 로그인도 같은 블로그 선생님 보고 성공했다! 하지만 중간중간에 삐그덕 거리긴 했다. 참고 블로그 (감사함다 선생님들!!) JPA 구조 JPA Repository 만들기 (인터페이스) @..

프로젝트 2022.12.19

프로젝트 진행 중 (1) - JPA 삽질

📌 요약 엄청난 JPA 삽질 중 구글에 나와있는 자료 거의 다 뒤져서 적용시켰으나 계속되는 연결 실패 으 진짜 뇌 녹을 거 같음 계속되고 있는 JPA 삽질.. 이거 때문에 지금 플젝 진전이 안 된다. 흠.. 정말 힘들고 어렵군. JPA는 SQLMapper와 파일 구조가 많이 다른 거 같다. 그거부터 새로 갈아엎어야 하는데 문제는 사람마다 다 환경(경로) 세팅하는 게 다른 거 같음ㅠㅠ 어쨌든 이걸로도 해보고 저걸로도 해봤는데 일단은 연결 실패... 고통스러운 이날도 얼른 끝나길.. 11.14 드디어 JPA로 MySQL 연결을 성공했다. 진짜 나와있는 블로그 다 뒤진 것 같은데도 연결 실패했던 내 지난 날이 생각나서 울컥한다ㅠ.. 이 블로그를 보고 따라해서 연결 성공했다! 감사함다 선생님..ㅋㅋㅠㅠ 근데 그..

프로젝트 2022.12.19

프로젝트 배포 - AWS EC2 CentOS

팀원과의 상의 후 우리는 프로젝트 생성 -> 배포 순서가 아닌 프로젝트 배포 -> 생성 순서로 결정했다. 그 이유는 국비학원에선 프로젝트를 다 만들고 난 후 배포를 하는 순서로 수업을 진행했는데, 로컬에서 서버로 올리는 과정에서 엄청난 에러를 마주했기 때문이다. 따라서 배포를 먼저 해버리고 프로젝트를 만들기 시작하는 순서로 바꾼 것이다. 오늘 했던 것은 AWS에서 EC2 인스턴스를 생성하고 접속하는 것이었다. (학원에서 사용했던 것은 Naver Cloud Platform) 다른 사람들은 linux, Ubuntu로 많이 하는 것 같은데 우리는 학원에서 CentOS로 진행을 해서 그걸로 했다. PuTTy를 이용해 서버에 접속을 하고 Java와 Tomcat, Jenkins 설치까지 완료하고 이제 MySQL과 ..

프로젝트 2022.12.19

프로젝트 시작 전 (3) - Docker란?

공부 중... 계속 업데이트 예정 1. Docker - Jenkins - AWS 구조 출처 2. Github - Docker - Jenkins 구조 출처 💡 요약 : 도커에 Jenkins 띄운 후 Build Now를 클릭해 Github에서 소스코드를 가져와 Spring Boot 프로젝트 빌드, Docker이미지로 생성해 배포 3. [Windows 10 Home] Docker - WSL2 설치 (Hyper-V 아님) 이 블로그 보고 따라함 ※ 그냥 보고 따라하면 Docker Desktop이 작동하지 않았다ㅠㅠ 하지만, 이 블로그의 이 글을 따라 Ubuntu를 설치하니 Docker Desktop이 작동 했다. ※ 그리고 블로그 글대로 진행되지 않으면 컴 재부팅 해보시길.. 재부팅 안 하고 그냥 했더니 안 되..

프로젝트 2022.12.19

프로젝트 기획 - 기술 스택

조금씩 프로젝트의 윤곽이 잡히고 있다. 일단 주제는 소비 생활 바로잡기 - 1일 1 챌린지 이다. 사용할 기술 스택은 Git (형상관리) Jenkins (배포) SpringBoot (백엔드) Java11 / Maven / Tomcat9 MySQL (DB) MyBatis, JPA (DB 연동) JSP (View 페이지) (JSP 사용 시, 꼭 WAR 패키징 사용) JUnit (Test) AWS (배포) Docker / Kubernetes (컨테이너) 이다. 대략적인 틀... 나중에 수정해나갈 예정이다. 이 중에서 JPA와 AWS, JUnit, Docker은 배우지 않았기 때문에 팀원과 공부하기로 했다. 또한 알고리즘 공부도 더 열심히 하기로 함. 이왕 하는 거 끝까지 가보자고..! 자체 서비스 기업은 신입..

프로젝트 2022.12.19

프로젝트 시작 전 (2) - JPA란?

✅ 한 줄 정리 우리는 SpringBoot와 MySQL을 MyBatis로 연결했지만, SpringBoot와 MySQL을 JPA로 연결하는 방식을 많이 쓴다. → 구글에 ‘JPA CRUD’라고 치면 예제 많이 나옴 ✅ Entity Table Annotaion 출처 * @Entity 해당 클래스를 테이블과 매핑한다고 JPA에게 알려줌. @Entity가 사용된 클래스를 엔티티 클래스라고함. * @Table 엔티티 클래스와 매핑할 테이블 정보를 알려줌. name 속성을 사용하여 물리적인 테이블과 연결 시킬수 있음. ex) @Table(name="MEMBER") * @Id 엔티티 클래스의 필드를 테이블 기본키에 매핑. @Id가 사용된 필드를 식별자 필드라고함. * @Column 필드를 컬럼에 매핑. name 속성..

프로젝트 2022.12.19