본문 바로가기

분류 전체보기139

[Spring] 스프링 트랜잭션 트랜잭션이란 트랜잭션은 완전히 성공 하거나 완전히 실패하는 일련의 논리적 작업 단위 입니다. @Transactional 애노테이션 스프링 트랜잭션은 프로그래밍 방식과 선언적 방식의 두가지 방식으로 구분할 수 있습니다. 프로그래밍 방식 TransactionTemplate 직접 PlatformTransactionManager 구현하기 트랜잭션 관리가 비즈니스 로직과 함께 사용되기 때문에 프로그래밍 방식으로는 널리 사용되지 않음 하지만 기능이 몇가지 밖에 없는 애플리케이션에서는 트랜잭션 프록시를 통한 부하가 중한 작업으로 느껴질 수 있어서 프로그래밍 방식이 사용될 수 있음 선언적 방식 (@Transactional) 메서드 혹은 구현체 클래스 상단에 @Transactional 애노테이션을 사용합니다. 클래스 수.. 2022. 9. 30.
[Spring] @Bean vs @Component @Bean과 @Component 차이 안녕하세요. 이번 시간에는 빈과 컴포넌트의 차이에 대해 알아보겠습니다. 먼저 스프링은 개발의 제어권이 스프링 컨테이너(IoC 컨테이너)에 있습니다. 그래서 이를 IoC (Inversion Of Control), 제어의 역전이라고 합니다. 스프링이 개발자 대신 객체를 제어하기 위해 객체들이 빈(Bean)으로 등록되어 있어야 합니다. 과거에는 객체를 빈으로 등록하기 위해 XML로 지정했어야 하는데 요즘은 애노테이션으로 간단하게 등록할 수 있습니다. @Bean @Bean은 메서드 레벨에서 선언하며, 반환되는 객체(인스턴스)를 개발자가 수동으로 빈으로 등록하는 애노테이션 입니다. @Configuration public class AppConfig { @Bean public .. 2022. 9. 28.
[JAVA] 추상 클래스와 인터페이스의 차이 개요 이번 포스팅에서는 추상 클래스와 인터페이스의 차이점에 대해 알아보겠습니다. 차이점에 대해 알아보기에 앞서 추상 클래스와 인터페이스의 개념에 대해 설명드리겠습니다. 추상 클래스 (abstract class) 추상 클래스(abstract class)란 하나 이상의 추상 메서드 (abstract method)를 포함하는 클래스 입니다. 추상 메서드는 선언만 있고 본체는 없는 함수이며 선언부에 'abstract'라는 키워드를 붙입니다. 추상 메서드가 포함되어 있다면 클래스도 추상 클래스이므로 클래스명 앞에도 'abstract' 키워드를 붙여야 합니다. abstract class Animal { public String sName; public void move() { } abs.. 2022. 9. 22.
[JAVA & Kotlin] Java 메모리 구조 (JVM Memory Structure) JVM JVM(Java Virtual Machine)은 자바 가상 머신으로 자바 프로그램을 실행시키기 위해서 반드시 실행되어야 하는 소프트웨어 입니다. 자바 프로그램을 실행시키는 것은 JVM을 실행시키고 그 위에서 자바 프로그램을 실행시킨다는 의미입니다. 즉 JVM은 운영체제(OS)와 자바 프로그램 사이를 연결해주는 중계자 역할을 합니다. 자바 코드를 컴파일하여 .class 바이트 코드(.class 파일은 바이트 코드라고 하는데 사람이 쓰는 자바 코드에서 컴퓨터 읽는 기계어의 중간 단계라고 할 수 있습니다)로 만들면 이 코드가 자바 가상 머신 환경에서 실행됩니다. 이러한 특징으로 인해 자바 프로그램에서 오류가 발생해도 JVM만 다운될 뿐 전체 시스템에 데미지를 주지 않습니다. 또한 JVM 덕분에 플랫폼에.. 2022. 9. 14.
[Network] Cookies vs Sessions 개요 Cookies vs Sessions HTTP의 특징과 쿠키와 세션을 사용하는 이유 사용자가 로그인 페이지에서 로그인 서버에서 사용자가 보낸 정보가 존재하는 사용자인지 확인 존재하는 사용자인 경우 유일한 세션 ID를 생성하고 사용자 ID와 매핑정보를 저장 클라이언트에 세션 ID를 쿠키로 저장하도록 전달 이후에 클라이언트에서 서버로 요청을 할 때 서버는 request header의 쿠키 정보(세션 ID)를 확인하고 세션 ID와 매핑되는 ID의 사용자로 인식함 기본적으로 HTTP 프로토콜 환경은 connectionless, stateless한 특성을 가집니다. 따라서 서버는 클라이언트가 누구인지 매번 확인해야 합니다. 이러한 HTTP 프로토콜의 특성을 보완하여 서버가 클라이언트를 식별하게 하기 위해 쿠키.. 2022. 9. 7.
[AWS] NAT Gateway / Transit Gateway란? NAT Gateway NAT 게이트웨이는 NAT(Network Address Translation, 네트워크 주소 변환) 서비스 프라이빗 서브넷의 인스턴스가 VPC 외부의 서비스에 연결할 수 있지만 외부 서비스에서 이러한 인스턴스와 연결을 시작할 수 없도록 NAT 게이트웨이를 사용할 수 있음 즉 외부 서비스에서 프라이빗 서브넷의 인스턴스로 접근할 수 없게 하지만 프라이빗 서브넷의 인스턴스에서는 외부 서비스로 접근할 수 있게 해주는 서비스 VPC (Virtual Private Cloud) 란? 먼저 VPC 개념을 알아보면 AWS에는 VPC라는 가상의 사설 네트워크망을 구축할 수 있는 서비스가 있음 VPC를 이용하면 기존 온프레미스 형태와 마찬가지로 외부에서 접근할 수 없는 사설(Private) 네트워크 망.. 2022. 9. 2.
[AWS] Global Accelerator 란 Global Accelerator(글로벌 액셀러레이터) AWS의 글로벌 네트워크 인프라를 통해 사용자 트래픽을 전송하여 인터넷 사용자 성능을 최대 60% 개선하는 네트워킹 서비스 Global Accelerator는 사용자와 가장 가까운 위치의 사용 가능한 정상 엔드포인트로 트래픽을 자동으로 재라우팅하여 엔드포인트 장애를 완화함 Global Accelerator의 자동 라우팅 최적화 기능은 인터넷이 혼잡할 때 패킷 손실, 지터 및 지연 시간을 일관적으로 낮게 유지함 Global Accelerator는 2개의 글로벌 정적 고객용 IP를 제공함. 트래픽이 도착하는 최종 엔드포인트는 AWS 특정 리전의 ELB(Application Load Balancer 또는 Network Load Balancer), 탄력적 .. 2022. 8. 31.
[JPA] 테스트 코드 실행 후 데이터 rollback 설정하기 상황 CRUD (데이터 저장/조회/수정/삭제) 로직을 구현한 후 JUnit을 이용하여 테스트 코드를 작성하는 경우 @Entity @Getter @Setter public class Member { @Id @GeneratedValue private Long id; private String username; } @Repository public class MemberRepository { @PersistenceContext private EntityManager em; public Long save(Member member) { em.persist(member); return member.getId(); } public Member find(Long id) { return em.find(Member.cla.. 2022. 8. 15.
[GCP] Google Cloud API Google Cloud API API = Application Programming Interface Google Cloud Service와 통신하기 위한 프로그래밍 인터페이스 프로젝트를 새로 생성 후 처음 서비스를 사용하면 해당 서비스의 API를 Enable(활성화)해야함 2022. 8. 15.
[Thought] 성장하는 개발자가 되는 5가지 팁 성장하는 개발자가 되는 5가지 팁 1. 다음은 오지 않는다. '이번만, 다음에!' 하지 않기 지금 직면했을 때! 지금이 가장 최적기! 2.깨어있기 (사고하기) 의식을 깨우자! 사고하며 공부하고 일하자! 3. 메모하기: 내가 필요한 지식들 정리하기 4. 우선 순위 정하기 (T자로 공략해나가기) 주력나무, 튼튼 토양, 깊은 토양으로 세분화 5. 일정관리: 균형 있게 공부하기 2022. 7. 29.