[GDG] 개발코스 4주차 WIL

2025. 7. 29. 12:40·팀 프로젝트/[2025][GDG]홍대 맛집 아카이빙 프로젝트

사진이 한 장도 없길래 그냥 첨부한 사진 / 노들섬에서..

배운 것

javax.mail을 통한 이메일 전송하기

https://dev-dx2d2y-log.tistory.com/10

DTO

https://dev-dx2d2y-log.tistory.com/11

스프링 기본 구조 / 컴포넌트 / 빈

https://dev-dx2d2y-log.tistory.com/15

DDD / 도메인모델 / Model

https://dev-dx2d2y-log.tistory.com/16

TDD 기초 / 자바API

https://dev-dx2d2y-log.tistory.com/18

https://dev-dx2d2y-log.tistory.com/19

유효성검사

https://dev-dx2d2y-log.tistory.com/20

확장(상속) / 다형성 / Object / 인터페이스

https://dev-dx2d2y-log.tistory.com/21

https://dev-dx2d2y-log.tistory.com/22

스택 / 힙 / 가비지 컬렉션

https://dev-dx2d2y-log.tistory.com/24

H2DB / JDBC를 통해 개발한 것에 적용시켜보기

https://dev-dx2d2y-log.tistory.com/25

https://dev-dx2d2y-log.tistory.com/26

JDBC

https://dev-dx2d2y-log.tistory.com/27


느낀점

이번에는 자바의 기초와 스프링의 기초에 대해 배워보고자했고, 아직 좀 남았긴했지만 그래도 꽤 여러 정보들을 쌓을 수 있어서 좋았다.

약간의 밈으로 올라온 영상이긴한데

이번 2주동안 여기 나와있는 정보를 알아보자!라는 마음으로 공부를 했다.

그런데 기획코스 개발하면서 DAO/DTO, Builder 패턴, 전역 Exception 처리 배우고, 책에서 TDD, Validator도 배우긴 했는데.. Setter 안쓰면 위험한데라는 말의 뜻은 아직 잘 모르겠다.

 

암튼 이번 2주동안 가장 관심이 생긴 내용을 꼽아보자면 JDBC와 DDD

이전에 백엔드 관련 영상을 보다가 DB에 대해서 경험이 적으면 무조건 ORM 쓰지말고 쿼리문을 직접 찍어보라고 했는데, 그래서 JPA를 안쓰고 JDBC를 써보고 있다. SQL문법도 금방 배운다는데 언제 한 번 배웠으면 좋겠다. DDD 공부할 때 레포지토리 계층에서 JPA의 예시를 몇 번 봤는데, 확실히 JPA가 편하긴 한 것 같긴한게, save, findById 이런 메서드들을 전부 작성해줘야해서...

 

DDD에도 꽤 관심이 생겼는데, 사실 내가 읽고 있는 자바 관련 책들이 거의 DDD를 기반으로 예시 코드를 작성했다. 지금 내가하는 컨트롤러 - 서비스 - DB 계층구조의 개발도 나름 분업화가 잘 되어있고, 만족까지는 아니더라도 볼만한 구조라고 생각했는데, DDD 관련 정보를 찾아보니 꽤 매력적인 구조다. 언제 한 번 DDD를 적용시켜보고 싶었는데, 그러면 내가 짠 코드를 전부 갈아엎어야하고.. 백엔드 협업자 분이 3계층 아키텍처를 사용했는데 나만 DDD 쓰면 둘 중 하나는 바꿔야하고해서 그냥 바꾸진 않았다. 그래도 나중에 TDD랑 DDD 공부해서 간단한 프로젝트에 적용시켜보고 싶다.

 

 가장 신기한 것은 javax.mail

 아니 코드를 몇 줄 짜고 API 요청을 그리로 보내면 진짜 메일이 와있다. 이게 제일 신기했던 것 같다. 작업물을 명확하게 볼 수 있는 프론트엔드에 비해서 작업물과 성과를 명확하게 알기 어려운 백엔드의 특성 상 이렇게 나의 코드가 맞게 동작한다는 것을 볼 때마다 참 신기한 것 같다. 메일은 아니지만 DB를 세웠을 때 POSTMAN에서 코드를 실행시킨 후에 DB를 조회하니 내가 저장한 정보가 찍혀있는 것도 참 신기했다.


시행착오

 원래 코드에 DB를 적용시키지 않았는데 DB를 적용시켜보았다. 근데.. 좀 코드가 난해하다. 뒤죽박죽이라고해야하나.


내가 생각한 것은 JWT토큰 발급할 때처럼 서비스에서 JWTFilter에 접근하고 토큰을 발급하는, 즉 토큰발급의 과정이 완전히 분리되어 있고 서비스에서는 그 분리된 클래스만 호출시키는 것을 생각했고 DB 관련 코드들도 그렇게 짤 수 있나 생각해보았다. 근데 생각해보니 레포지토리에 save 메서드를 지정해두고 DB에 값을 적용할 때만 이에 접근하니까 일종의 비슷한 역할을 한다고 볼 수 있겠다.

 

 public ResponseEntity<ResponseDTO> login(String secret, MemberRequestDTO memberRequestDTO) {
        String userId = memberRequestDTO.getUserId();
        Integer count = jdbcTemplate.queryForObject("SELECT COUNT(*) FROM member WHERE user_Id = ?", Integer.class, userId);

        if (count == 1) { //정보 있음. 로그인
            String ideintifier = userId;
            String passWord = jdbcTemplate.queryForObject("SELECT password FROM MEMBER WHERE user_Id = ?", String.class, userId);
            String enteredPassword = memberRequestDTO.getPassword();

            if (passWord.equals(enteredPassword)) {
                ResponseDTO responseDTO = ResponseDTO.builder()
                        .status(200)
                        .message("성공")
                        .accessToken(jwtFilter.createToken(secret, ideintifier))
                        .refreshToken(jwtFilter.createRefreshToken(secret, ideintifier))
                        .build();

                Integer countToken = jdbcTemplate.queryForObject("SELECT COUNT(*) FROM TOKEN WHERE user_id = ?", Integer.class, userId);

                Token token = Token.builder()
                        .userId(userId)
                        .refreshToken(jwtFilter.createRefreshToken(secret, ideintifier))
                        .build();

                if (countToken == 1) {
                    tokenRepository.update(token);
                } else {
                    tokenRepository.save(token);
                }

                return ResponseEntity.status(HttpStatus.OK).body(responseDTO);
            }

 DB코드 중 일부. 약간의 오류가 있을 수 있습니다.

 약간 헷갈리는 부분은 아이디 / 비밀번호를 입력받았을 때 DB를 돌면서 같은 아이디가 있는지, 있다면 같은 비밀번호인지 확인을 해야하는데, 그 부분에서는 좀 코드를 더럽게 짰다. 코어타임 때 짰는데 주변이 너무 시끄러워서 집중이 안되기도 했고.. 이 부분에 대해서는 리팩토링이 필요할 것 같다. 어떤 방식으로 할 지는 잘 모르겠지만..

그래도 POSTMAN으로 테스트구동을 해보면 잘 동작한다.

https://youtu.be/lc8thDXhnOo

 

 프로그램 아키텍처나 개발 관련해서 진리란 없지만.. 처음에는 내가 쓰던 컨트롤러 - 서비스 - DB의 계층구조에 익숙해져있고, 그게 거의 스탠다드라고 생각해서서 도메인의 개념을 이해하기 힘들었다. DDD 기초, 그러니까 도메인의 개념과 DDD의 장점에 대해서 거의 꼬박 하루동안 공부한 것 같다. 아니 왜 비즈니스 로직을 담는데 인스턴스 변수가 필요하지? 그럼 서비스와 다른게 뭐지? 뭐 이런 생각을 했다. 근데 막상 이해하니까 DDD가 좀 더 나아보이긴하다ㅋㅋ

 

 JDBC를 하면서 내가 직접 SQL문을 찍는데 SQL Injection과 이를 방지하는 Preparedstatement라는 개념이 등장했는데, 그 둘은 이해했는데, 내가 Preparedstatement 의 예시를 책에서 읽었더니 제대로 이해가 안돼서 거의 한참동안 그것만 조사한 것 같다. Preparedstatement에 쿼리문을 넣고 KeyHolder로 ID값을 빼오는 과정.. 이게 일대다 관계의 테이블에서 쓰면 좋다고하는데, 일대일, 일대다 테이블의 관계에 대해서도 공부해야겠다. SQLD 책을 드디어 펼 때가 왔는걸

 

'팀 프로젝트 > [2025][GDG]홍대 맛집 아카이빙 프로젝트' 카테고리의 다른 글

[GDG] 홍대 맛집 아카이빙 프로젝트 #12 - 투표기능 DB연결  (2) 2025.08.06
[GDG] 홍대 맛집 아카이빙 프로젝트 #11 - 로그인/회원가입 마무리 (진)  (2) 2025.07.31
[GDG]홍대 맛집 아카이빙 프로젝트 #10.1 - H2 DB 강화하기  (2) 2025.07.27
[GDG]홍대 맛집 아카이빙 프로젝트 #10 - H2 DB 연결하기  (3) 2025.07.27
[GDG]홍대 맛집 아카이빙 프로젝트 백엔드 개발 #9 - 회원가입 기능 개발하기  (1) 2025.07.22
'팀 프로젝트/[2025][GDG]홍대 맛집 아카이빙 프로젝트' 카테고리의 다른 글
  • [GDG] 홍대 맛집 아카이빙 프로젝트 #12 - 투표기능 DB연결
  • [GDG] 홍대 맛집 아카이빙 프로젝트 #11 - 로그인/회원가입 마무리 (진)
  • [GDG]홍대 맛집 아카이빙 프로젝트 #10.1 - H2 DB 강화하기
  • [GDG]홍대 맛집 아카이빙 프로젝트 #10 - H2 DB 연결하기
Radiata
Radiata
개발을 합니다.
  • Radiata
    DDD
    Radiata
  • 전체
    오늘
    어제
    • 분류 전체보기 (211)
      • 신년사 (3)
        • 2025년 (2)
        • 2026년 (1)
      • CS (59)
        • JVM (12)
        • 백엔드 (20)
        • 언어구현 (1)
        • 객체지향 (1)
        • 논리회로 (5)
        • 컴퓨터구조 (9)
        • 데이터베이스 (1)
        • 컴퓨터 네트워크 (10)
      • 언어공부 (64)
        • Java | Kotlin (48)
        • JavaScript | TypeScript (9)
        • C | C++ (6)
      • 개인 프로젝트 (11)
        • [2025] Happy2SendingMails (3)
        • [2026] 골든리포트! (8)
        • [2026] 순수자바로 개발하기 (0)
        • 기타 이것저것 (0)
      • 팀 프로젝트 (29)
        • [2025][GDG]홍대 맛집 아카이빙 프로젝트 (29)
      • 알고리즘 (13)
        • 백준풀이기록 (11)
      • 놀이터 (0)
      • 에러 수정일지 (2)
      • 고찰 (24)
        • CEOS 23기 회고록 (2)
  • 블로그 메뉴

    • CS
    • 언어공부
    • 개인 프로젝트
    • 팀 프로젝트
    • 알고리즘
    • 고찰
    • 신년사
    • 컬러잇 개발블로그
  • 링크

    • 컬러잇 개발블로그
  • 공지사항

  • 인기 글

  • 태그

    144
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Radiata
[GDG] 개발코스 4주차 WIL
상단으로

티스토리툴바