[GDG]홍대 맛집 아카이빙 프로젝트 #10 - H2 DB 연결하기

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

스프링인액션 책을 읽다가 JPA와 H2DB에 대해서 설정해서.. 이왕 설정한거 H2DB를 통해서 간단한 테스트를 하나 진행하면 좋을 것 같다.

 

package com.hongchelin.Domain;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import lombok.Data;

@Entity
@Data
public class Member {
    @Id
    @GeneratedValue(strategy = jakarta.persistence.GenerationType.IDENTITY)
    private Long id;

    private String name;
    private String role;
    private String refreshToken;

}

도메인을 세팅해준다.

Data 어노테이션은 Getter 어노테이션과 함께 몇 가지 기능이 더 추가된 어노테이션이라고 한다.


package com.hongchelin.Repository;

import com.hongchelin.Domain.Member;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import java.sql.ResultSet;
import java.sql.SQLException;

@Repository
public class MemberRepository implements MemberRepositoryInterface {
    private JdbcTemplate jdbcTemplate;

    @Autowired
    public MemberRepository(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    @Override
    public Iterable<Member> findAll() {
        return jdbcTemplate.query("select id, name, role, refreshToken from Member",
                this::mapRowToMember);
    }

    @Override
    public Member findById(Long id) {
        return jdbcTemplate.queryForObject(
                "select id, name, role, refreshToken from Member where id=?",
                this::mapRowToMember, id);
    }

    @Override
    public Member save(Member member) {
        jdbcTemplate.update(
                "insert into Member (id, name, role, refreshToken) values (?, ?, ?, ?)",
                member.getId(),
                member.getName(),
                member.getRole(),
                member.getRefreshToken()
        );
        return member;
    }

    private Member mapRowToMember(ResultSet rs, int rowNum) throws SQLException {
        return Member.builder()
                .id(rs.getLong("id"))
                .name(rs.getString("name"))
                .role(rs.getString("role"))
                .refreshToken(rs.getString("refreshToken"))
                .build();
    }
}

Repository는 이렇게 짜줬다.

각 명령문에 대한 설명은 [2025백엔드] 스프링인액션 독서 #3 - 데이터로 작업하기 참고

 

암튼 이를 연결해보자

우선 처음에 짰던 소셜로그인에 연동시켜보려한다.

 

        MemberDTO memberDTO = MemberDTO.builder()
                .identifier(id)
                .userRole(ismember == true ? "inner" : "outer")
                .accessToken(userToken)
                .refreshToken(refreshToken)
                .build();

        if (ismember) {
            responseDTO = ResponseDTO.builder()
                    .status(200)
                    .message("로그인 성공. 외부인 계정으로 로그인")
                    .redirectUrl("/")
                    .MemberInfo(memberDTO)
                    .build();
        }
        else {
            responseDTO = ResponseDTO.builder()
                    .status(250)
                    .message("로그인 성공. 회원가입창 이동")
                    .accessToken(userToken)
                    .refreshToken(refreshToken)
                    .build();
        }

그전에 기존 방식은 DTO를 쓰지않고 ResponseDTO에 인자로 role 등의 변수를 전달해서 좀 수정하고..

 

            Member member = Member.builder()
                    .name("이름이름")
                    .role("inner")
                    .refreshToken(refreshToken)
                    .build();

            memberRepository.save(member);

이렇게 저장하는 변수를 만들었다.

 

그런데..

엥? SQLException이 일어나서 살펴보니..

JDBC는 미리 내가 DB테이블을 설정해놔야한다..

참고로 JPA는 저걸 다 해준다고한다. JPA는 대체 뭐길래 모든 것을 다 해주는걸까?

 

그리고 몇 가지 오류를 수정했다.

- ID 값으로는 String이 올 수 없어서 ID를 자동으로 배정해주는 GeneratedValue 어노테이션을 사용했다.

- 그렇기 때문에 DB에 값을 저장할 때 ID를 넘겨줄 필요가 없어서 삭제

- Member 객체는 refreshToken으로 리프레시토큰을 저장하지만 DB에선 REFRESH_TOKEN으로 접근해야한다.

성공

NAME에는 사용자가 직접 설정한 닉네임이 들어갈 예정이다. 지금은 REFRESH_TOKEN의 값이 다른 것으로 구별하면 됨

 

https://youtu.be/al-hYnKmTUg

영상으로 보기

 

우선은 여기까지.. 발표용 PPT 만들어야해서.....


다음에할거는...

다른 기능들에 대하여 DB를 저장하는 것이다.

사실 로그인은 닉네임만을 가지고 DB에서 정보를 긁어오는거라.. 정작 필요한 것은 회원가입에서 필요하다는거

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

[GDG] 개발코스 4주차 WIL  (5) 2025.07.29
[GDG]홍대 맛집 아카이빙 프로젝트 #10.1 - H2 DB 강화하기  (2) 2025.07.27
[GDG]홍대 맛집 아카이빙 프로젝트 백엔드 개발 #9 - 회원가입 기능 개발하기  (1) 2025.07.22
[GDG]홍대 맛집 아카이빙 프로젝트 백엔드 개발 #8 - 투표기능 개발하기  (4) 2025.07.21
[GDG]홍대 맛집 아카이빙 프로젝트 #7 - 투표기능 기획  (2) 2025.07.20
'팀 프로젝트/[2025][GDG]홍대 맛집 아카이빙 프로젝트' 카테고리의 다른 글
  • [GDG] 개발코스 4주차 WIL
  • [GDG]홍대 맛집 아카이빙 프로젝트 #10.1 - H2 DB 강화하기
  • [GDG]홍대 맛집 아카이빙 프로젝트 백엔드 개발 #9 - 회원가입 기능 개발하기
  • [GDG]홍대 맛집 아카이빙 프로젝트 백엔드 개발 #8 - 투표기능 개발하기
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]홍대 맛집 아카이빙 프로젝트 #10 - H2 DB 연결하기
상단으로

티스토리툴바