
JDBC 개발 - 조회
2022. 8. 1. 21:04
JDBC
MemberRepositoryV0 - 회원 조회 추가 public Member findById(String memberId) throws SQLException { String sql = "select * from member where member_id = ?"; Connection con = null; PreparedStatement pstmt = null; ResultSet rs = null; try { con = getConnection(); pstmt = con.prepareStatement(sql); pstmt.setString(1, memberId); rs = pstmt.executeQuery(); if (rs.next()) { Member member = new Member(); membe..
JDBC 개발 - 등록
2022. 8. 1. 19:50
JDBC
Member package hello.jdbc.connection.domain; import lombok.Data; @Data public class Member { private String memberId; private int money; public Member() { } public Member(String memberId, int money) { this.memberId = memberId; this.money = money; } } MemberRepositoryV0 - 회원 등록 package hello.jdbc.connection.repository; import hello.jdbc.connection.DBConnectionUtil; import hello.jdbc.connection.do..

데이터베이스 연결
2022. 8. 1. 01:47
JDBC
데이터베이스 연결 ConnectionConst package hello.jdbc.connection; public abstract class ConnectionConst { public static final String URL = "jdbc:h2:tcp://localhost/~/test"; public static final String USERNAME = "sa"; public static final String PASSWORD = ""; } DBConnectionUtil package hello.jdbc.connection; import lombok.extern.slf4j.Slf4j; import java.sql.Connection; import java.sql.DriverManager; impor..

JDBC와 최신 데이터 접근 기술
2022. 8. 1. 00:41
JDBC
JDBC는 1997년에 출시될 정도로 오래된 기술이고, 사용하는 방법도 복잡하다. 그래서 최근에는 JDBC를 직접 사용하기 보다는 JDBC를 편리하게 사용하는 다양한 기술이 존재한다. 대표적으로 SQL Mapper와 ORM 기술로 나눌 수 있다. JDBC 직접 사용 SQL Mapper SQL Mapper 장점: JDBC를 편리하게 사용하도록 도와준다. SQL 응답 결과를 객체로 편리하게 변환해준다. JDBC의 반복 코드를 제거해준다. 단점: 개발자가 SQL을 직접 작성해야한다. 대표 기술: 스프링 JdbcTemplate, MyBatis ORM 기술 ORM 기술 ORM은 객체를 관계형 데이터베이스 테이블과 매핑해주는 기술이다. 이 기술 덕분에 개발자는 반복적인 SQL을 직접 작성하지 않고, ORM 기술이 ..

JDBC 이해
2022. 7. 31. 20:43
JDBC
JDBC 등장 이유 애플리케이션을 개발할 때 중요한 데이터는 대부분 데이터베이스에 보관한다. 클라이언트, 애플리케이션 서버, DB 클라이언트가 애플리케이션 서버를 통해 데이터를 저장하거나 조회하면, 애플리케이션 서버는 다음 과정을 통해서 데이터베이스를 사용한다. 애플리케이션 서버와 DB - 일반적인 사용법 1. 커넥션 연결: 주로 TCP/IP를 사용해서 커넥션을 연결한다. 2. SQL 전달: 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결된 커넥션을 통해 DB에 전달한다. 3. 결과 응답: DB는 전달된 SQL을 수행하고 그 결과를 응답한다. 애플리케이션 서버는 응답 결과를 활용한다. 애플리케이션 서버와 DB - DB 변경 문제는 각각의 데이터베이스마다 커넥션을 연결하는 방법, SQL을 전달하는..
원격의 브랜치 다루기
2022. 7. 31. 16:42
Git
1. 로컬에서 브랜치 만들어 원격에 push 해보기 from-local 브랜치 만들기 아래 명령어로 원격에 push 아래와 같이 하면 대상을 명시하라는 메시지 나타남 git push 아래 명령어로 원격의 브랜치 명시 및 기본설정 git push -u origin from-local git push -u origin from-local 브랜치 목록 살펴보기 GitHub에서 목록 보기 아래 명령어로 로컬과 원격의 브랜치들 확인 git branch --all 2. 원격의 브랜치 로컬에 받아오기 GitHub에서 from-remote 브랜치 만들기 git branch -a에서 현재는 보이지 않음 아래 명령어로 원격의 변경사항 확인 git brahcn -a로 확인 git fetch 아래 명령어로 로컬에 같은 이름..
push와 pull
2022. 7. 31. 16:32
Git
1. 원격으로 커밋 밀어올리기(push) Leopards의 members에 Evie 추가 커밋 메시지: Add Evie to Leopards 아래 명령어로 push 이미 git push -u origin main으로 대상 원격 브랜치가 지정되었기 때문에 가능 git push GitHub 페이지에서 확인 GitHub의 파일들과 커밋 내역 확인 2. 원격의 커밋 당겨오기(pull) GitHub에서 Leopards의 members에 Dongho 추가 커밋 메시지: Add Dongho to Leopards 아래 명령어로 pull git pull 로컬에서 파일과 로그 살펴보기 3. pull 할 것이 있을 때 push를 하면? 로컬에서 Leopards의 manager를 Dooli로 수정 커밋 메시지: Edit Le..
원격 저장소 사용하기
2022. 7. 31. 14:24
Git
GitHub 레포지토리 생성 후 복붙 명령어 git remote add origin (원격 저장소 주소) 로컬의 Git 저장소에 원격 저장소로의 연결 추가 원격 저장소 이름에 흔히 origin 사용. 다른 것으로 수정 가능 git branch -M main GitHub 권장 - 기본 브랜치명을 main으로 git push -u origin main 로컬 저장소의 커밋 내역들 원격으로 push(업로드) -u 또는 --set-upstream : 현재 브랜치와 명시된 원격 브랜치 기본 연결 ⭐️ GitHub의 해당 레포지토리 페이지 새로고침하여 살펴보기 파일들 내용 커밋 내역들 원격 목록 보기 git remote 자세히 보기: git remote -v 원격 지우기 (로컬 프로젝트와의 연결만 없애는 것. ..
GitHub 시작하기
2022. 7. 31. 14:04
Git
1. 가입하고 토큰 만들기 Sign Up으로 가입 후 로그인 Personal access token 만들기 우측 상단의 프로필 - Settings Developer Settings Personal access tokens - Generate new token repo 및 원하는 기능에 체크, 기간 설정 뒤 Generate token 토큰 안전한 곳에 보관해 둘 것 토큰 컴퓨터에 저장하기 윈도우 가이드 Windows 자격 증명 관리자 Windows 자격 증명 선택 git:https://github.com 자격 정보 생성 사용자명과 토큰 붙여넣기 소스트리에도 추가 설정 > 계정 탭 > 추가 버튼 인증방식은 베이직, 프로토콜은 HTTPS로 설정 사용자명(GitHub 아이디)와 암호(토큰) 설정 아래의 두 스크..
충돌 해결하기
2022. 7. 30. 18:44
Git
상황 만들기 conflict-1, conflict-2 브랜치 생성 1. merge 충돌 해결하기 git merge conflict-1로 병합을 시도하면 충돌 발생 오류 메시지와 git status 확인 당장 충돌 해결이 어려울 경우 아래 명령어로 merge 중단 git merge --abort 해결 가능 시 충돌 부분을 수정한 뒤 git add ., git commit으로 병합 완료 2. rebase 충돌 해결하기 conflict-2에서 git rebase main로 리베이스 시도하면 충돌 발생 오류 메시지와 git status 확인 당장 충돌 해결이 어려울 경우 아래 명령어로 merge 중단 git rebase --abort 해결 가능 시 충돌 부분을 수정한 뒤 git add . 아래 명령어로 계속 ..
branch를 합치는 두 가지 방법
2022. 7. 30. 18:05
Git
서로 다른 브랜치를 합치는 두 방식 merge : 두 브랜치를 한 커밋에 이어붙입니다. 브랜치 사용내역을 남길 필요가 있을 때 적합한 방식입니다. 다른 형태의 merge에 대해서도 이후 다루게 될 것입니다. rebase : 브랜치를 다른 브랜치에 이어붙입니다. 한 줄로 깔끔히 정리된 내역을 유지하기 원할 때 적합합니다. 이미 팀원과 공유된 커밋들에 대해서는 사용하지 않는 것이 좋습니다. 1. merge로 합치기 dd-coach 브랜치를 main 브랜치로 merge main 브랜치로 이동 아래의 명령어로 병합 git merge add-coach :wq로 자동입력된 커밋 메시지 저장하여 마무리 소스트리에서 확인 💡 merge는 reset으로 되돌리기 가능 merge도 하나의 커밋 merge하기 전 해당 브..

여러 branch 만들어보기
2022. 7. 30. 14:14
Git
1. 브랜치 생성 / 이동 / 삭제하기 add-coach란 이름의 브랜치 생성 git branch add-coach 브랜치 목록 확인 git branch add-coach 브랜치로 이동 git switch add-coach checkout 명령어가 Git 2.23 버전부터 switch, restore로 분리 브랜치 생성과 동시에 이동하기 git switch -c new-teams 기존의 git checkout -b (새 브랜치명) 브랜치 삭제하기 git branch -d (삭제할 브랜치명) to-delete란 브랜치 만들고 삭제해보기 지워질 브랜치에만 있는 내용의 커밋이 있을 경우 즉 다른 브랜치로 가져오지 않은 내용이 있는 브랜치를 지울 때는 -d 대신 -D(대문자)로 강제 삭제해야 합니다. g..
프로젝트의 변경사항들을 타임캡슐(버전)에 담기
2022. 7. 28. 22:54
Git
변경사항 확인 git status 추적하지 않는(untracked) 파일: Git의 관리에 들어간 적 없는 파일 파일 하나 담기 git add tigers.yaml git status로 확인 모든 파일 담기 git add . git status로 확인 타임캡슐 묻기 아래 명령어로 commit git commit Vi 입력 모드로 진입 작업Vi 명령어상세 입력 시작 i 명령어 입력 모드에서 텍스트 입력 모드로 전환 입력 종료 ESC 텍스트 입력 모드에서 명령어 입력 모드로 전환 저장 없이 종료 :q 저장 없이 강제 종료 :q! 입력한 것이 있을 때 사용 저장하고 종료 :wq 입력한 것이 있을 때 사용 위로 스크롤 k git log등에서 내역이 길 때 사용 아래로 스크롤 j git log등에서 내역이 ..
Git의 관리에서 특정 파일/폴더를 배제해야 할 경우
2022. 7. 28. 22:25
Git
a. 포함할 필요가 없을 때 자동으로 생성 또는 다운로드되는 파일들 (빌드 결과물, 라이브러리) b. 포함하지 말아야 할 때 보안상 민감한 정보를 담은 파일 .gitignore 파일을 사용해서 배제할 요소들을 지정할 수 있습니다. .gitignore 형식 https://git-scm.com/docs/gitignore 참조
Git 설정 & 프로젝트 관리 시작하기
2022. 7. 28. 22:14
Git
Git 최초 설정 Git 전역으로 사용자 이름과 이메일 주소를 설정 GitHub 계정과는 별개 터미널 프로그램 (Git Bash, iTerm2)에서 아래 명령어 실행 git config --global user.email "(본인 이메일)" 아래의 명령어들로 확인 git config --global user.name git config --global user.email 기본 브랜치명 변경 git config --global init.defaultBranch main 프로젝트 생성 & Git 관리 시작 해당 폴더에서(VS Code 터미널 기본) 아래 명령어 입력 git init 폴더에 숨김모드로 .git 폴더 생성 확인 이 폴더를 지우면 Git 관리내역이 삭제됩니다. (현 파일들은 유지) 터미널에 아래 ..
스프링 데이터 JPA가 제공하는 Querydsl 기능
2022. 7. 28. 15:15
Querydsl
여기서 소개하는 기능은 제약이 커서 복잡한 실무 환경에서 사용하기에는 많이 부족하다. 그래도 스프링 데이터에서 제공하는 기능이므로 간단히 소개하고, 왜 부족한지 설명하겠다. 인터페이스 지원 - QuerydslPredicateExecutor QuerydslPredicateExecutor 인터페이스 public interface QuerydslPredicateExecutor { Optional findById(Predicate predicate); Iterable findAll(Predicate predicate); long count(Predicate predicate); boolean exists(Predicate predicate); // … more functionality omitted. } 리포지..
스프링 데이터 페이징 활용3 - 컨트롤러 개발
2022. 7. 27. 01:32
Querydsl
실제 컨트롤러 @RestController @RequiredArgsConstructor public class MemberController { private final MemberJpaRepository memberJpaRepository; private final MemberRepository memberRepository; @GetMapping("/v1/members") public List searchMemberV1(MemberSearchCondition condition) { return memberJpaRepository.search(condition); } @GetMapping("/v2/members") public Page searchMemberV2(MemberSearchCondition ..
스프링 데이터 페이징 활용2 - CountQuery 최적화
2022. 7. 27. 01:04
Querydsl
PageableExecutionUtils.getPage()로 최적화 @Override public Page searchComplex(MemberSearchCondition condition, Pageable pageable) { List content = queryFactory .select(new QMemberTeamDto( member.id, member.username, member.age, team.id, team.name)) .from(member) .leftJoin(member.team, team) .where(usernameEq(condition.getUsername()), teamNameEq(condition.getTeamName()), ageGoe(condition.getAgeGoe())..
스프링 데이터 페이징 활용1 - Querydsl 페이징 연동
2022. 7. 26. 22:20
Querydsl
스프링 데이터의 Page, Pageable을 활용해보자. 전체 카운트를 한번에 조회하는 단순한 방법 데이터 내용과 전체 카운트를 별도로 조회하는 방법 사용자 정의 인터페이스에 페이징 2가지 추가 public interface MemberRepositoryCustom { List search(MemberSearchCondition condition); Page searchPageSimple(MemberSearchCondition condition, Pageable pageable); Page searchComplex(MemberSearchCondition condition, Pageable pageable); } 전체 카운트를 한번에 조회하는 단순한 방법 searchPageSimple(), fetchRes..