일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- CKA
- ORM
- DevOps
- CI/CD
- programmers
- IntelliJ
- 알고리즘
- hibernate
- 해시맵
- docker
- 뷰
- 프로그래머스
- java
- map
- Spring
- cd
- Oracle
- builder-pattern
- k8s
- Di
- JPA
- vuejs
- dabase
- Vue
- Kubernetes
- 코딩테스트연습
- superBuilder
- 자바
- CI
- SpringMVC
- Today
- Total
목록개발 (72)
문홍의 공부장
본 글은 atlassian 의 Git Tutorials - Merging vs. Rebasing 을 번역한 글임을 밝힙니다. git rebase 명령어는 초보자가 멀리해야할 마법의 Git hocus pocus 라는 명성이 있지만, 주의하여 잘 사용한다면 개발 팀의 삶을 훨씬 더 쉽게 만들 수 있다. 이 글에서는, git rebase 와 git merge 명령을 비교하고, rebase 를 전형적인 Git workflow 에서 통합할 수 있는 모든 잠재적인 기회를 알아보도록 하겠다. 개념 가장 먼저 이해해야 하는 것은, git rebase 와 git merge 는 같은 문제를 해결한다는 것이다. 이 두 명령어는, 하나의 브랜치에서 다른 브랜치로부터의 변경 내용을 통합하기 위해 설계되었다. 하지만, 이 둘은 ..
프로젝트에서 커스텀 헤더를 사용하여야 하는 건이 있어, API 호출 시 커스텀 헤더 값을 넣어 요청을 보내는 기능을 개발하였다. 커스텀 등록 헤더에 'X-' 를 prefix 로 붙이는 관례가 폐기된 지 오래라 하여, 'X-' 를 붙이지 않고 커스텀 헤더를 만들었다. 커스텀 등록 헤더는 'X-'를 앞에 붙여 추가될 수 있지만, 이 관례는 RFC 6648에서 비표준 필드가 표준이 되었을때 불편함을 유발하는 이유로 2012년 6월에 폐기되었습니다. 다른것들은 IANA 레지스트리에 나열되어 있으며, 원본 컨텐츠는 RFC 4229에서 정의되었습니다. IANA는 또한 제안된 새로운 메시지 헤더의 레지스트리도 관리합니다. Custom proprietary headers have historically been use..
앞선 @Primary 와 @Qualifier (1) - 기본편 에서, 어노테이션의 기능과 사용법에 대하여 알아보았다. 이 내용을 바탕으로, 최근 실무에 적용하였던 사례를 정리해보고자 한다. 최근 multiple database 를 구성하는 태스크가 있어, 두 개의 데이터베이스 중 하나를 메인 DB 로, 다른 하나를 서브 DB 로 정의하여 환경을 구성하였다. 데이터베이스 스키마에 따라 myBatis 와 JPA 를 분리하여 사용하는 것으로 하였다. 이에 따라 메인 DB 는 myBatis mapper 를 스캔할 수 있도록 하는 설정을 추가하고, 서브 DB 에는 entityManager 에 대한 설정을 추가하였다. 1. 메인 DB 의 DataSource 설정 메인 데이터베이스 커넥션에 @Primary 를 사용하..
빌더 패턴은 객체를 생성할 때 사용하는 패턴으로, 메서드 체이닝 방식으로 객체를 생성하여 코드의 가독성 및 유지보수성을 높이기 위해 흔히 사용된다. 이번 프로젝트에서 빌더 패턴을 자주 사용하면서, 그 내용을 간단히 정리해 보자 한다. 객체를 생성하는 방법 1. Constructor 생성자 함수를 이용하여 객체를 생성한다. 필수 인자를 받는 필수 생성자와, 선택적 인자를 받는 생성자를 점층적으로 추가한다 모든 선택적 인자를 받는 생성자를 추가한다 생성자 함수를 이용하면, 선택적 인자를 받아 객체를 생성하여야 하는 케이스가 많을 경우, 각기 다른 생성자를 호출하여야 한다. 인자 수가 많아질수록 그 의미를 파악하기 어려워지며, 코드의 가독성이 떨어진다. 또한, 인자가 추가될 경우 코드를 수정하기 어려워진다. ..
프론트 팀원이 보내주고 빵터진 짤 웃김 아니 사실 안웃김 죄송합니다 라고만 말하면 클납니다. (..) 솔직히 말하면 내가 저렇게 생각했다. 여태까지 feature 개발을 주로 하고, 백엔드 프레임워크를 구성하는 일은 항상 시니어 개발자/타 부서에서 담당해 주었기 때문에, CORS 에러라는 걸 고민해본 적이 거의 없었다. 프론트엔드 개발자가 많이 마주하는 에러라고 알고 있었기에 그냥 그런줄만 알고 있었다. 이번에 CORS configure 관련 코드를 세팅해 두었음에도 계속해서 CORS 에러가 발생하는 이슈가 있었고, 내가 CORS 에 대하여 잘 모르고 있다 보니 이 에러가 프론트에서 나는 문제인지, 서버 쪽 문제인지 파악하는데 시간이 걸렸다. (결론적으로 둘다 문제였다)이번 기회에 CORS 에 대해서 공..
개발을 하다보면, boolean 필드를 사용하는 경우가 자주 있다. 응답 DTO 에 아래와 같이 boolean 필드값을 포함하여 리턴하려고 하는데, json으로 직렬화 하는 과정에서 is 가 빠지고 XXX 형태로 리턴하게 된다. @Getter public class Response { private String name; private int age; private boolean isActive; } { "name": "홍길동", "age": 20, "active": true } 왜 그럴까? lombok 의 @Getter 어노테이션은, primitive boolean 타입 필드에 대하여 getter 메서드를 생성할 때, 접두사로 get이 아닌 is를 사용한다. (boolean isFoo -> getIsF..
Customized AOP 적용하기 Spring AOP 의 개념에 대해 이해하고, 대표적인 AOP 어노테이션인 @Transactional 의 동작 원리에 대하여 살펴 보았다. 개발을 하다 보면 cross-cutting concerns 이 빈번하게 생겨난다. 이런 것들을 하나의 모듈로 만들어 적용 할 수 있도록, AOP 를 통해 Custom Annotation 을 만들어 보자. 1. 어노테이션 정의 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface LogExecutionTime { ... } 메서드의 실행 시간을 로깅하기 위해 위와 같이 @LogExecutionTime 어노테이션을 정의하였다. 런타임 시에 어노..
@Transactional의 동작 원리 @Service @RequiredArgsConstructor public class UserService { private final UserRepository userRepository; @Transactional public void save(User user){ userRepository.save(user); } } @Transactional 을 붙이면 일어나는 일 Spring Configuration 에 @EnableTransactionManagement 어노테이션 추가 (Spring boot 에서는 auto configuration 됨) Spring Configuration 에서 Transaction manager 지정 @Transactional 이 붙은 ..