| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 29 | 30 |
| 31 |
- awspring
- assert
- N + 1
- 프로젝트 이름 변경
- OIDC
- 이펙티브 자바
- ngrinder
- Cannotacquirelockexception
- mockito
- @controller
- 컨트리뷰터
- Git
- spring-cloud-starter-aws
- @RequestMapping
- batch insert
- oauth2.0
- Commit
- 정적 팩터리 메서드
- intellij
- @Transaction(readOnly=true)
- fetch join
- redis
- JPA
- naturalid
- spring
- injellij
- AWS
- MySQLTransactionRollbackException
- convertAndSendToUser
- websocket
- Today
- Total
목록분류 전체보기 (23)
정리정리
이번에 Github에 대해 다시 생각해 보는 기회가 생겼고, 그중에서도 좋은 커밋이란 무엇일까에 대해 고민을 하면서 찾게 된 세 가지를 정리해보려 한다.1. Atomic CommitAtomic Commit은 A Developer’s Guide to Atomic Git Commits - Sandro Dzneladze의 글을 바탕으로 정리하려고 한다.글에서는 커밋을 "더 이상 쪼갤 수 없는, 의미 있는 최소 단위"로 정의한다. 그러기 위해서 다음과 같은 세 가지를 만족해야 한다.1. 하나의 논리적 변경만 담는다2. 커밋 이후에도 코드베이스가 동작하는 상태여야 한다3. 관심사를 섞지 않는다 (ex: feat: xxx기능 변경 및 리팩터링)이렇게 함으로써 다음과 같은 7가지 이점을 얻을 수 있다.안전성커밋이 하..
프롬프트 엔지니어링이란 단어를 처음 접하면 "엔지니어링"이라는 단어 때문에 조금 거창하게 느껴질 수 있다.그런데 막상 들여다보면, 결국은 원하는 것을 상대방이 이해할 수 있게 전달하는 법을 이야기하고 있는 것과 크게 다르지 않다는 것을 알 수 있다.이 글에서는 프롬프트를 어떤 식으로 작성하면 좋을지에 대해 공부하면서, 같은 주제를 두고 어떻게 쓰느냐에 따라 결과가 얼마나 달라지는지를 확인하고 정리해보려고 한다.좋은 프롬프트를 구성하는 요소들LLM과 관련된 여러 레퍼런스를 살펴보면, 효과적인 프롬프트에는 공통적으로 담기는 요소들이 있다. 물론 모든 요소를 매번 다 넣어야 하는 건 아니다. 중요한 건 이 요소들이 각각 어떤 역할을 하는지 이해하고, 상황에 맞게 골라서 쓰는 것이다.맥락 (Context)프롬프..
이슈최근에 새로 업데이트된 Spring boot 4.0.0를 이용해 코드를 작성해보고 있었는데, Spring Redis를 사용하는 코드에서 문제가 발생하였다.List results = stringRedisTemplate.executePipelined( new RedisCallback() { @Override public Object doInRedis(RedisConnection connection) throws DataAccessException { StringRedisConnection stringRedisConn = (StringRedisConnection) connection; // 예외 발생 부분 ... return null; } });해당 코드는 S..
소켓 통신을 구현하면서 비즈니스 로직 예외 처리를 구현하다가 겪은 삽질들을 기록하려고 합니다.목표는 크게 두 가지였습니다.전역적인 비즈니스 예외 처리subscribe 과정에서 예외가 발생할 경우, 구독에 실패하며 예외 처리우선 동작하는 최종 코드입니다.@Configuration@RequiredArgsConstructor@EnableWebSocketMessageBrokerpublic class WebSocketConfig implements WebSocketMessageBrokerConfigurer { private final AuthChannelInterceptor authChannelInterceptor; private final StompExceptionHandler stompExcepti..
@NaturalId@NaturalId는 NaturalId(자연 키) 임을 명시해 주고, 캐싱과 같은 추가적인 기능을 제공하는 하이버네이트의 어노테이션입니다.자연 키로 사용하고 싶은 필드 위에 붙여주는 방식으로 사용할 수 있습니다.이 어노테이션은 JPA의 어노테이션이 아니기 때문에 캐싱을 사용하려면 하이버네이트의 API를 사용해야 합니다.import org.hibernate.annotations.NaturalId;@Entity@Getter@NoArgsConstructorpublic class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @NaturalId private Strin..
demo 프로젝트를 생성하고 프로젝트 이름을 변경해 보도록 하겠습니다.settings.gradle에 있는 rootProject.name을 변경하려는 프로젝트 이름으로 변경하고 gradle refresh를 해줍니다.올바르게 변경이 되었다면 새로 변경된 프로젝트 이름이 위와 같이 변경됩니다.사실 저 부분은 Intellij에서 인식하는 프로젝트 이름입니다.Intellij의 프로젝트 설정(command + ;)에 들어가서 프로젝트 이름을 변경해도 위와 같이 보이게 되지만 settings.gradle의 값을 변경해 줘도 Intellij에서 자동으로 프로젝트 이름을 변경해 주기 때문에 따로 설정할 필요는 없습니다.마찬가지로 .idea/.name 파일도 Intellij를 종료 후 다시 프로젝트를 불러오면 현재 프로젝..
Assert란assert 조건식; //기본 형식assert 조건식 : 에러 메시지; //메시지 포함 형식assert age >= 0;assert age >= 0 : "나이는 음수일 수 없습니다";assert는 jdk 1.4에서 추가된 키워드로, 코드가 논리적으로 올바르게 작동하는지 확인하는 데 사용합니다. Assert, Exception 차이1. assert의 쓰임새어떻게 보면 if - exception의 간결한 표현이라고 생각할 수 있지만 둘의 쓰임새는 많이 다릅니다.마틴 파울러의 리팩토링 책에서도 assert의 사용법에 대해 다음처럼 언급합니다.• 코드에서 기본적으로 가정하고 있는 조건들을 주석이 아닌 Assertion을 사용해서 보다 명시적으로 나타낼 수 있다.• Assertion은 '반드시 ..
최근에 인프런의 스프링 강의 예제를 스프링 부트 3.1로 따라 치다가 겪은 문제점과 알게 된 점이 있어 정리해 보고자 글을 작성합니다. 문제 상황 우선 문제를 겪은 예제 코드는 다음과 같았습니다. @RequestMapping @ResponseBody public interface OrderControllerV1 { @GetMapping("/v1/request") String request(@RequestParam("itemId") String itemId); } public class OrderControllerV1Impl implements OrderControllerV1 { @Override public String request(String itemId) { return "ok"; } } AOP를 ..