분류 전체보기 51

Spring Transaction 에 대한 이해

📌 들어가며 코드리뷰를 진행하다 보면 항상 나오는 얘기 중 하나가 바로 '트랜잭션 관리를 어떻게 할것인가' 에 대한 내용입니다. 그만큼 Exception이 발생했을 때 어떻게 할 것인가에 대한 내용이 중요한 만큼 이에 대한 대처 중 하나인 Transaction에 대해 정리해 보도록 하겠습니다. 📌 Transaction 의 정의 트랜잭션은 데이터베이스의 상태를 변경하는 작업 또는 한번에 수행되어야 하는 연산들을 뜻합니다. 즉, 병행 제어 시 처리되는 작업의 논리적 단위입니다. Transaction은 하나의 흐름으로 하나의 실행이 성공하거나 실패하면 모든 연산들을 동일하게 처리합니다. A, B, C의 연산을 한 묶음이라고 할 때 A는 정상 작동 됐지만, B가 실패한다면 A의 작업 이력도 이전으로 돌립니다. ..

BackEnd/SpringBoot 2023.09.20

[Spring] 어노테이션의 정의와 동작원리

📌 들어가며 SpringBoot를 이용해 개발을 하다보면 정말 많이 사용하게 되는 것 중 하나가 어노테이션입니다. 종류도 매우 다양하며(@RestController, @Component.. 등) Personal 어노테이션을 만들 수도 있습니다. 오늘은 이러한 Spring에서 어노테이션의 정의와 동작원리에 대해서 알아보도록 하겠습니다. 📌 Annotation 의 정의 어노테이션에 대한 정의를 자바 공식 문서에서 찾아보면 https://docs.oracle.com/javase/tutorial/java/annotations/ Lesson: Annotations (The Java™ Tutorials > Learning the Java Language) The Java Tutorials have been writ..

BackEnd/SpringBoot 2023.09.18

[JPA] 자바에서 복합키 사용하기

📌 들어가며 테이블을 설계하다 보면 주로 detail 관련 테이블에 id + 순번으로 복합키를 생성하게 되는 경우가 많습니다. 이번 포스팅에서는 복합키를 사용하는 테이블을 자바에서 Entity로 개발하는 방법중 가장 흔히 쓰이는 @EmbeddedId 어노테이션에 대해 포스팅하려고 합니다. 📌 EmbeddedId Embeddable Object를 Id로 사용하는 방식으로 주로 아래와 같이 코딩하여 사용합니다. @Embeddable @Getter @NoArgsConstructor @AllArgsConstructor public class OrderItemId implements Serializable { @Column(name = "ord_id") private Long orderId; @Column(nam..

BackEnd/JPA 2023.09.17

스프링 부트 로컬 캐시 적용하기

📌 들어가며 백엔드 개발을 할 때 가장 신경쓰게 되는 것은 아무래도 API의 성능일 것입니다. 많은 트래픽을 받아도 안정적인 속도로 동일한 결과를 사용자에게 제공해 주어야 하기 때문입니다. 이번 포스팅에서는 이러한 API의 성능을 높일 때 사용되는 방법중 하나인 캐시를 적용하는 방법을 알아보고자 합니다. 캐시를 적용하기 위해 Redis를 사용하기도 하는데요 해당 포스팅에서는 스프링부트의 자체 캐시(로컬 캐시)를 사용해 보도록 하겠습니다. 📌 캐시란? 캐시는 자주 사용하는 데이터를 저장해두고 재활용하는 기술을 뜻합니다. 일반적으로 캐시는 일시적인 특징이 있는 데이터 집합을 고속 데이터 스토리지 저장합니다. 따라서 이후에 해당 데이터에 대한 동일한 요청이 있을 경우, 데이터의 원본 스토리지 위치로 액세스할 ..

BackEnd/SpringBoot 2023.06.25

Java 에서 입력 값 받아오기

📌 들어가며 백준에서 코딩 테스트를 연습할 땐 한 가지 더 신경써야 하는 부분이 있습니다. 바로 입력값을 받아오는 것인데요..! 프로그래머스의 경우에는 입력값을 따로 받아오지 않아도 제출 하는 과정에서 입력값이 받아지게 되지만 백준의 경우에는 입력값을 받아오는 부분까지 코딩을 직접 해줘야 합니다. 기업마다 코딩테스트를 보는 방식이 달라서 요즘 대부분은 프로그래머스 방식이긴 하지만 이번 기회에 java 에서 입력값을 받아오는 방법을 정리해 보고자 합니다. 📌 Scanner 일반적으로 크지 않은 숫자를 받을 때 사용합니다. import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner sc = new Sc..

Algorithms/백준 2023.06.12

Java 에서의 예외처리

📌 들어가며 개발을 할 때 가장 중요한 요소 중 하나를 뽑으라면 '예외처리' 를 들 수 있을 것 같습니다. 모든 개발을 하는 과정에선 예외 Exception이 발생할 수 있고 해당 Exception을 얼마나 세분화 해서 처리하는지 또는 Exception이 발생했을 때 어떻게 대처할 것 인지를 정하는 것은 매우 중요한 요소 중 하나라고 할 수 있습니다. 오늘 포스팅에서는 Java에서 Exception을 어떻게 처리하는지에 대해 정리해 보도록 하겠습니다. 📌 예외 처리하기 예외 처리하기 위해서는 크게 두 가지 방법을 사용합니다. 하나는 try - catch 구문을 사용하는 것이고 다른 하나는 Exception 을 throw(예외 던지기) 하는 것입니다. try { ... } catch(예외1) { ... }..

Java 2023.06.03

@Embeddable @Embedded 어노테이션에 대해 알아보자

📌 들어가며 @Embeddable 과 @Embedded 어노테이션은 Entity가 단순할 때에는 잘 사용하지 않지만 Entity 가 복잡해질 수록 가독성과 공통적인 의미를 갖고 있는 컬럼을 하나의 객체로 사용하기 위해 자주 사용하게 되는 어노테이션입니다. 이번 포스팅에서는 해당 어노테이션의 사용법에 대해 정리해보도록 하겠습니다. 📌 @Embeddable , @Embedded 어노테이션 사용하기 Embeddable 어노테이션을 사용하는 가장 흔한 예시인 User Entity를 정의하면서 해당 어노테이션의 사용법을 알아보겠습니다. 우선 두 어노테이션은 @Embeddable : 값 타입을 정의하는 곳에 표시 @Embedded : 값 타입을 사용하는 곳에 표시 다음의 위치에서 사용하게 됩니다. 그럼 예시로 Us..

BackEnd/JPA 2023.04.24

Feign Client 를 활용하여 외부통신 연동하기

📌 들어가며 백엔드 API 개발을 하다보면 외부 서비스와 연동해야 하는 일이 많이 생깁니다. 특히 현재 주문/결제 도메인팀에 있다보니 더더욱 비즈니스 로직에서 외부통신을 해야하는 경우가 많이 생기는 것 같습니다. 이번 포스팅에서는 외부통신을 도와주는 많은 라이브러리들(HttpClient, WebClient) 중 Feign Client 에 대해 알아보고자 합니다. 📌 Feign Client Feign Client란 Netflix에서 개발한 Http Client입니다. (HttpClient는 Http 요청을 간편하게 만들어서 보낼 수 있도록 돕는 객체) 처음에는 Netflix에서 자체적으로 개발을 진행(Spring Cloud Netflix Feign)했지만 현재는 오픈소스 프로젝트인 OpenFeign으로 전..

BackEnd/SpringBoot 2023.04.22

@Transient 어노테이션에 대한 이해

📌 들어가며 이번 포스팅에서는 @Transient 어노테이션이 무엇인지, 그리고 그 쓰임에 대하여 정리하고자 합니다. 새롭게 합류한 도메인팀의 스프링부트 로직에서 @Transient 가 다수 발견되어 정리하게 되었습니다. 📌 @Transient 란 @Transient는 엔티티 객체의 데이터와 테이블의 컬럼(column)과 매핑하고 있는 관계를 제외하기 위해 사용합니다. 주로 보안정보나 굳이 테이블에 저장할 필요는 없지만 도메인 로직 또는 비즈니스 로직상 계산을 위해 필요한 경우 해당 어노테이션을 활용합니다. 더 정확히 표현하면 JPA의 가장 큰 특징 중 하나인 영속성 컨텍스트 대상에서 제외시키기 위하여 사용됩니다. 또한 JPA 의 컬럼 매핑 레퍼런스 어노테이션은 Field, Property 방식을 지원하..

BackEnd/JPA 2023.04.20

[프로그래머스][lv2][1차] 뉴스 클러스터링

📌 문제 [1차] 뉴스 클러스터링 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 📌 풀이 문제에서 제시한대로 구현하면 되는 문제입니다. 해당 문제를 구현할 때 핵심적인 부분은 map을 사용하여 교집합과 합집합을 구하는 부분입니다. 문제에서 min 과 max를 사용하여 교집합과 합집합을 구하는 풀이를 알려주었으므로 그대로 구현하면 됩니다. 풀이의 순서는 교집합과 합집합을 구할 수 있도록 주어진 String을 통해 Map을 만듭니다. 양쪽 map에 동일한 key값이 있는지 확인하는 방식으로 교집합과 합집합을 구합니다. (교집합 / 합집합) * 65536 을 ..

카테고리 없음 2023.04.12