728x90
반응형

2025/11 32

[Git] merge 진행 과정

merge를 이해하기Git에서 협업 할 때 내가 가장 중요하다고 생각하는 것은내 작업 브랜치는 어떤 dev를 기준으로 만들어졌는가?이다. dev는 공용 개발 브랜치이며 모든 feature 브랜치는 dev의 특정 시점에서 분기된다. 문제는 dev는 계속 변한다는 것인데 본질을 이해하고 넘어가면 실수할 일이 줄어든다.그래서 merge의 본질은 내 브랜치를 최신 dev 기준으로 다시 맞추는 과정이라고 생각한다.merge의 기준점은 항상 devdev를 항상 최신으로 만든 뒤작업 브랜치에 dev를 mergefetch와 pull의 역할git fetch형상 확인용, 정보 동기화용git fetch origin원격 저장소의 최신 상태를 복사만 해옴origin/dev가 업데이트됨내 로컬 브랜치에는 아무 변화 없음 git ..

Dev./Git 2025.11.30

[Spring] interface의 default 메서드를 언제 써야 할까

default 메서드란설계 확장을 위한 도구Java 8 이전에는 인터페이스에 추상 메서드만 선언할 수 있었다. 문제는 인터페이스를 이미 여러 구현체가 구현하고 있는 상황에서 메서드 하나를 추가하면 모든 구현체가 깨짐이문제를 해결하기 위해 default 메서드가 나왔다public interface Repository { Optional findById(Long id); default T getOrNull(Long id) { return findById(id).orElse(null); }} 인터페이스에 기본 구현을 제공기존 구현체를 깨지 않고 기능 추가 가능무엇을 담당하는 메서드일까?모든 구현체에서 동일하게 동작해야 하는 공통 행위구현체마다 바뀌면 안되는 로직맥락을 몰라도 실행 ..

Dev./Spring 2025.11.29

[Nbcam] 한달 회고 2

벌써 또 한 달이 흘렀다.과연 나는 이 한 달 동안 얼마나 더 성장했을까?팀장 경험 — 책임을 피해 오던 내가, 책임을 맡게 되기까지나는 원래 나서는 걸 좋아하는 성격이다.하지만 모순적이게도 책임을 진다는 것에는 항상 부담을 느껴서, 지금까지 단 한 번도 팀장을 맡아본 적이 없었다.숙련 주차 팀장을 정할 당시, 랜덤으로 팀장이 되었고싫다고 말할 수는 없었던 상황이었다. 다행히 본격적인 팀 프로젝트는 아니었기 때문에 부담이 조금 덜했고, 그렇게 첫 팀장 역할을 맡게 되었다.이왕 팀장이 된 거, 그냥 역할만 수행하고 끝내고 싶지는 않았다.“나와 같은 팀원들이 이 시간만큼은 같이 성장했으면 좋겠다”는 마음이 컸다.그래서 내가 개인적으로 질문받았던 내용, 혼자 공부하며 정리했던 것들, 그리고 실무 경험을 통해 ..

BootCamp 2025.11.28

[Docker] MySQL Worbench 사용해 프로젝트 DB 더미데이터 구성 및 Docker 전환 과정

프로젝트 개발 중 DB에 더미데이터가 필요한 상황이 되었고, 내가 익숙하게 사용하던 도구는 MySQL WorkBench뿐이었다.그래서 우선 로컬 DB에서 더미데이터를 만들고,이후 팀원들과 동일한 환경을 공유하기 위해 Docker 기반 MySQL로 전환하였다.1. properties 파일 ddl-auto 수정Spring Boot의 JPA 설정에서ddl-auto 기본값은 create로 되어 있었는데, 이 옵션은 애플리케이션 실행 시마다 테이블을 삭제하고 새로 생성한다.spring.jpa.hibernate.ddl-auto=create하지만 나는 직접 작성한 SQL 파일(CREATE, INSERT)을 통해더미데이터를 계속 유지하고 싶었기 때문에 DDL 자동 생성 기능을 끄기로 결정했다.spring.jpa.hib..

CICD 2025.11.27

[Git] git switch와 checkout 차이

습관적으로 checkout을 사용하다 커밋이 꼬이는 일이 생겨 두가지의 차이를 정리해보려고 한다.한줄 요약git checkout은 브랜치 이동 + 파일 변경 + 커밋 되돌리기까지 모든 걸 하는 올드한 만능 명령어이고, git switch는 브랜치 이동만 전담하게 분리된 최신 명령어이다.왜 git switch가 만들어졌을까?git checkout은 너무 많은 기능을 한 명령어에 몰아넣어서 실수가 잦았음git checkout dev # 브랜치 이동git checkout main.txt # 파일 상태 되돌리기같은 checkout 기능이지만 의미가 완전히 다름git switch브랜치 이동 전용 명령어이다.브랜치 이동git switch dev새 브랜치 생성 + 이동git switch -c feature/..

Dev./Git 2025.11.26

[Error] Docker MySQL 세팅 시 3306 포트 오류 해결방법

왜 3306 포트 오류가 나올까?도커 MySQL과 로컬 MySQL이 둘 다 3306 포트를 사용하려고 해서 충돌하기 때문이다.도커는 포트를 실제 OS에서 공유함. 즉, “가상환경”이라도 포트는 절대 가상화되지 않는다대표 오류 메세지Ports are not available: listen tcp 0.0.0.0:3306: bind: address already in use3306 이미 누가 쓰고 있어서 도커가 못 씀해결 방법 1. 3306 점유 프로세스 확인lsof -i :3306문제가 있는 경우mysqld 1234 ...com.docke 5678 ...mysqld (로컬 MySQL) 포트 때문에 충돌이 난다.2. 로컬 MySQL 중지brew services stop mysql 맥은 macOS의 기능 ..

Dev./Error. 2025.11.25

[Docker] Docker+Intellij로 MySQL 서버 띄워보자

Docker란?어디서 실행해도 똑같이 돌아가는 환경을 가상 컨테이너로 만들어주는 기술쉽게말해내컴퓨터에서는 되는데??의 문제를 해결해주는 기술프로젝트 문서에 기술 버전까지 적으라는 이유를 이 문제로 설명할 수 있습니다.개발자들은 A컴퓨터에선 잘 돌아가는데 B컴퓨터에서는 오류가 나는 경우를 심심치않게 만날 수 있다. 프로젝트는 협업의 과정이기 때문에 나만 잘 돌아간다고 끝낼 수 없습니다.왜 이런문제가 발생할까?컴퓨터마다 설치된 프로그램 버전이 다르고 환경이 제각각이기 때문맥과 윈도우 동일하게 터미널에서 본인의 mysql 버전을 확인해보시면 이해가 편하실겁니다mysql --version아래는 제 mysql 버전입니다.mysql Ver 8.0.44 for macos14.7 on x86_64 (Homebrew)..

CICD 2025.11.24

[SQL] ERD 재귀관계

상황프로젝트에서 댓글+대댓글 기능을 구현하려고 했을 때 다음과 같은 구조를 떠올렸다 comment — 댓글 본문을 저장comment_repost — 댓글과 대댓글의 관계를 별도로 저장하는 테이블대댓글을 위한 관계 테이블이 있어야 한다고 생각을 했다. 하지만 앞으로 기능구현을 해야할때 과연 이 구조가 최선의 선택일까를 고민하다가 댓글 시스템은 자료구조 tree 형태라는 것을 알게 되며 재귀관계라는 개념까지 연결되었다.재귀 관계 (Self-Reference)재귀 구조란 하나의 테이블이 스스로를 참조하는 구조parent_comment_id BIGINT NULL REFERENCES comment(id)​장점 댓글/대댓글/대대댓글… 모두 하나의 테이블로 관리CRUD 로직 단순함join이 명확해짐comment.pa..

SQL/SQL. 2025.11.23

[Nbcamp] 과제 어노테이션 정리

그때그때 필요한 어노테이션을 찾기보다 왜 필요하고 무슨일을 알아서 해주는지에 대해 알고 사용하기 위해 정리했다.⭐️ Entity@GetterLombok제공모든 필드에 대해 getter 자동 생성불변성, 캡슐화를 깨지 않고 필드 접근 가능@EntityJPA가 이 클래스를 DB테이블과 매핑되는 엔티티로 생각해당 어노테이션이 붙은 엔티티는 JPA가 영속성 컨텍스트로 관리@Table(name=””)엔티티가 매핑될 실제 테이블 이름 지정예약어나 기존 테이블과 충돌할 때 유용 (예약어 user와 충돌될 수 있으므로 users)@NoArgsConstructor(access=AccessLevel.PROTECTED)protected로 막아 외부에서 무분별한 객체 생성을 차단 → 얜 이해하기 너무어려움,,엔티티의 프록시조..

BootCamp 2025.11.22

[Spring] 스프링이 싱글톤 빈을 생성하는 과정

싱글톤이란?객체 하나만 만들어 전역적으로 공유하는 패턴핵심단 하나의 인스턴스어디서든 같은 인스턴스를 공유싱글톤 빈스프링은 기본적으로 애플리케이션 당 하나의 객체만 만들어 재사용싱글톤 스코프 제공개발자가 별도로 prototype/request/session scope 바꾸지 않는 한 1개의 객체만 생성후 재사용생성 과정1. 컴포넌트 스캔스프링이 실행되면 @ComponentScan 설정에 따라 프로젝트를 훑어 빈 클래스들을 찾는다.ex)@Component@Service@Repository@Controller@RestController이 클래스를 빈으로 만들겟다고 등록2. 빈 객체를 한번만 new 로 생성이때 싱글톤 인스턴스가 생성된다.스프링은 내부적으로 싱글톤 저장소를 Map 형태로 사용하고 있다.singl..

Dev./Spring 2025.11.21
728x90
반응형