[Java] 이것이 자바다 - 상속
·
Java
상속이란?현실에서 상속이란 부모가 자식에게 물려주는 행위를 말한다. 객체 지향 프로그래밍에서도 상속이 존재하는데 자식 클래스가 부모클래스를 상속받음으로써 부모클래스가 갖고 있는 필드나 메서드를 사용할 수 있다. 이러한 특성 덕분에 상속을 사용하면 코드의 중복을 줄여 개발 시간을 단축시키므로 매우 효율적이다. 부모클래스를 상속받는다고 해서 모든 필드와 메서드를 사용할 수 있는 것은 아니다. 부모클래스에서 접근제어자가 private인 필드나 메서드는 상속 대상에서 제외되며 부모클래스와 자식클래스가 다른 패키지에 존재하는 경우 default 접근제어자도 상속대상에서 제외된다.클래스 상속상속을 사용하는 방법은 아래와 같이 자식클래스의 extends 뒤에 부모클래스를 적으면 된다. 자바에서는 다중 상속을 허용하지..
[Spring] 디자인 패턴 - 전략 패턴(Strategy Pattern)
·
Spring
이전글에서 다뤘던 템플릿 메서드 패턴은 핵심기능과 부가기능을 분리해주기는 하지만 상속을 사용하기 때문에 부모, 자식 클래스 간에 강한 연관 관계가 생기거나, 핵심기능 클래스를 계속 생성해주어야 하는 등 여러가지 단점이 있었다. 전략 패턴은 상속이 아닌 위임을 사용하여 이러한 단점을 해결하면서 핵심기능과 부가기능을 분리한다. 위임이란 특정 클래스가 다른 클래스의 객체를 멤버로 갖고 있는 형태로 스프링의 의존성 주입 방식이 위임을 사용한 예시이다.전략 패턴은 아래와 같이 변하지 않는 부분을 Context 클래스에 두고 변하는 부분을 Strategy 인터페이스로 만들어 해당 인터페이스를 구현하여 주입해주는 패턴이다. 이렇게 하면 Context 클래스가 인터페이스에만 의존하기 때문에 구현체를 변경하거나 새로 만..
[Spring] 디자인 패턴 - 템플릿 메서드 패턴
·
Spring
이번 글에서는 김영한님의 스프링 핵심 원리 - 고급편에서 배운 내용을 바탕으로 스프링에서 자주 사용하는 디자인패턴에 대해 정리하려고 합니다. 디자인 패턴이란 프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 규약 형태로 만들어 놓은 것이다. 이 디자인 패턴을 사용하여 문제점을 해결하고 좋은 설계를 통해 유지보수하기 쉬운 코드를 작성할 수 있다. 강의에서는 좋은 설계란 변하는 것과 변하지 않는 것을 분리하는 것이라고 설명하고 있었다. 즉, 핵심 기능과 부가 기능을 따로 분리하여 모듈화 함으로써 하나의 클래스는 하나의 책임만 갖고 해당 클래스를 변경하는 이유는 오직 하나뿐이어야 한다는 단일 책임 원칙을 지키는 것을 강조하고 있었다. 이번 글에서 다룰 템플릿..
[Spring] 트랜잭션 전파(Transaction Propagation)
·
Spring
트랜잭션 전파트랜잭션이란 데이터베이스의 상태를 바꾸는 작업의 단위로 @Transactional을 메서드나 클래스에 선언하여 작업의 범위를 지정한다. 트랜잭션은 설정값에 따라 하나의 트랜잭션이 실행중일 때 다른 트랜잭션을 실행하면 기존의 실행중이던 트랜잭션에 종속되기도 하고 아예 새로운 트랜잭션이 실행되기도 하는데 이를 트랜잭션 전파(Transaction Propagation)라고 한다. 이번 글에서는 트랜잭션 전파 옵션의 종류와 의미, 그리고 적용예시에 대해서 정리해 보려고 한다.트랜잭션 전파 옵션REQUIRED트랜잭션 전파의 기본 설정이다. 실무에서 가장 많이 사용되는 옵션으로 기존 트랜잭션이 없으면 새로 생성하고 있으면 참여한다. 기존 트랜잭션이나 신규 트랜잭션 중 하나라도 롤백이 발생하면 전부 롤..
[Spring] @Transactional 호출 시 주의사항
·
Spring
Spring 프레임워크에서 제공하는 @Transactional 어노테이션을 사용하면 트랜잭션 AOP가 적용된다. 이 트랜잭션 AOP는 프록시 방식의 AOP를 사용하며 프록시 객체가 먼저 클라이언트의 요청을 받고 트랜잭션 처리를 한 후 실제 객체를 호출해준다. 만약 프록시 객체를 거치지 않고 실제 객체를 직접적으로 호출하게 되면 트랜잭션 AOP가 적용되지 않고 트랜잭션도 시작하지 않는다. 일반적으로 @Transactional 어노테이션을 선언하면 프록시 객체가 빈으로 등록되고 의존성 주입할 때도 프록시 객체를 주입하기 때문에 위와 같은 상황이 발생하지 않지만 실제 객체 내부에서 메서드 호출이 일어나면 프록시 객체를 거치지 않고 대상 객체를 직접 호출하기 때문에 트랜잭션이 적용되지 않는 경우가 발생한다.예시..
Handshake failed due to invalid Upgrade header: null
·
네트워크
문제상황SSAFY 자율 프로젝트에서 채팅 기능을 구현하는데 잘 동작하던 기능이 HTTPS를 적용하고 나서는 콘솔에 아래와 같은 에러가 발생하면서 채팅방에서 소켓연결이 실패했었습니다.  백엔드단에서도 로그를 확인해 보니 동일한 에러가 발생했습니다.(개발할 때 에러메세지를 캡처하지 못해서 문제를 해결할 때 참고했던 블로그의 사진을 인용하였습니다.)  "Handshake failed due to invalid Upgrade header: null"내 기존 location 들 , 아래를 추가velog.io해결방법Websocket 프로토콜은 서버와 클라이언트 간의 메세지 교환을 위한 통신 프로토콜로 양방향 통신을 지원하며 실시간 네트워크를 구현하는데 주로 사용됩니다.HTTP 프록시 및 중간 층을 지원하도록 설계..
OSI 7계층, TCP/IP 4계층
·
네트워크
OSI 7계층(물-데-네-전-세-표-응)OSI 7계층은 네트워크 통신이 일어나는 전과정을 7개의 단계로 표준화 한 것입니다. 이렇게 표준화 함으로써 통신이 일어나는 과정을 단계별로 파악할 수 있어, 문제가 발생했을 때 해당 문제를 해결하기 용이해집니다. 각 계층은 물리 계층 - 데이터링크 계층 - 네트워크 계층 - 전송 계층 - 세션 계층 - 표현(프레젠테이션) 계층 - 응용(애플리케이션) 계층 순으로 나뉘며 물리 계층부터 네트워크 계층까지를 하위 계층, 전송 계층부터 응용 계층까지를 상위 계층이라고 합니다.하위 계층 : 물리 계층 - 데이터 링크 계층 - 네트워크 계층상위 계층 : 전송 계층 - 세션 계층 - 표현 계층 - 응용 계층물리 계층물리 계층은 전송에 필요한 두 물리적 장치 간의 기계적, 전기..
[Spring] 비동기 통신과 데이터 동기화를 위한 카프카 활용 (2)
·
Spring
EC2 서버에서 Kafka, zookeeper 컨테이너 실행하기version: '2'services: zookeeper: image: wurstmeister/zookeeper ports: - "2181:2181" networks: my-network: ipv4_address: 172.18.0.100 kafka: image: wurstmeister/kafka ports: - "9092:9092" environment: KAFKA_ADVERTISED_HOST_NAME: 172.18.0.101 KAFK..