전체 글 썸네일형 리스트형 [HTTP] TCP : 3way handshake HTTP를 공부하면서 함께 접하게되는 TCP 프로토콜에서 빠지지 않는 가장 중요한 개념중 하나가 3way handshake 이다 SYN 으로 클라이언트가 서버에 접속 요청을하면 서버는 요청을 받아 클라이언트에게 접속요청과 수락(ACK)을 보낸다. 그러면 클라이언트는 서버에게 ACK와 함께 HTTP 데이터를 전송할 수 있게 되는 개념이다. 이 개념은 TCP의 "연결지향" 개념과 관련된 것으로, IP프로토콜이 목적지(서버)가 응답이 불가능한 상황임에도 무작정 요청을 전송하고 끝내버리는.. 한계인 "비연결성"을 극복하기 위한 개념으로 볼 수 있다. 더보기 [Spring]빈 스코프와 Provider 스프링 수업을 듣다가 빈 스코프(Scope)에 대해 공부했다. 기본적으로 스프링 컨테이너에 의해 주입되는 빈은 싱글톤의 스코프를 가지지만.. 예를들어 사용자가 호출할때마다 새롭게 호출되어야 하는 빈일 경우 @Scope("prototype") 으로 지정이 가능했다. 하지만 여기에서 문제가 생긴다. 해당 프로토타입 빈을 기존 싱글톤 빈 내에서 호출할 경우 객체의 스코프가 싱글톤으로 되어버린다. 이 문제를 해결하기 위해 스프링에서 제공하는 기능이 ObjectProvider 이다. 해당 클래스를 통해 의존할 빈을 찾는다 하여 DL(Dependency Lookup)이라 한다. 스프링 뿐만 아니라 자바로도 Provider를 통해 해당 기능을 지원한다. 다만 라이브러리를 가져와야 한다. 해당 클래스로 프로토타입으로 .. 더보기 [Network]로드밸런싱(Load Balancing) 네트워크의 부하를 분산하기 위한 방법 중 로드밸런싱이 있다. 일반적으로는 인터넷의 보급화로 인해 트래픽이 점점 증가하게 되고, 특히 특정 시간대에 집중적으로 트래픽이 몰리는 경우 서버가 수용할 수 있는 트래픽을 초과하게 된다면 장애가 발생할 수 있다. 이러한 문제를 방지하기 위해 로드밸런싱을 하게 된다. 내가 담당하는 서비스에서도 특정 시간대에 접속자 수가 늘어나게 되면 하나의 서버장비로는 장애에 대처할 수 없을 수 있기 때문에 로드밸런싱 장비를 도입하여 적용하기도 한다. 특정 서버 또는 네트워크 서브에 부하가 집중되지 않도록 트래픽을 다양한 방법으로 분산하여, 안정적으로 서버가 가동될 수 있도록 하는 것이다. 로드밸런싱은 L4(전송계층)와 L7(응용계층)에서 가능하다. - L4 : IP주소와 포트 번호.. 더보기 [Spring]Lombok(롬복) 롬복은 Getter, Setter생성 또는 생성자 코드를 편리하게 할 수 있도록 지원해주는 라이브러리 이다. 스프링에서는 생성자를 통한 주입을 권장하는데, 그럴 경우 @Autowired를 통하 아래와 같이 빈을 주입한다. 개발자의 덕목은 귀찮음 이므로, 이렇게 생성자 코드를 작성하는 부분을 줄이고 싶어진다. 그럴 경우 활용할 수 있는 것이 Lombok(롬복)이다. * 먼저 build.gradle에 아래와같이 추가한다. configurations { compileOnly { extendsFrom annotationProcessor } } * 그리고 dependencies 내에 아래의 dependencie를 추가해준다. compileOnly 'org.projectlombok:lombok' annotation.. 더보기 [Spring]@ComponentScan 스프링 프로젝트를 구축함에 있어, @Bean을 통해 스프링 빈을 생성할 수 있었지만, 만약 프로젝트 규모가 커진다면 매번 생성해야 할 빈을 생성하는 부분에 모두 @Bean 어노테이션을 지정해주어야 하는 번거로움이 있다. 스프링에서는 이러한 문제를 해결하기 위해 @ComponentScan 어노테이션이 존재한다. 설정클래스에 @ComponentScan 을 붙여주고 빈을 생성할 클래스에서 @Component 어노테이션을 붙여주면 된다. 그리고 클래스 생성자에 의존관계를 통해 주입을 받아야 하는 경우 @Autowired 어노테이션을 지정하면 된다. 컴포넌트 스캔의 기본 대상은 아래와 같다. @Component : 컴포넌트 @Controller : 스프링 MVC에서 컨트롤러로 사용 @Service : 서비스 계층.. 더보기 [Java]Call by value, Call by reference 자바에 대해 공부를 하다보면 기본 자료형과 참조 자료형에 따른 차이 때문에 혼동하는 상황에 직면할때가 있다. 자료형의 차이에 따른 값 호출 방식에 대한 차이때문에 발생하는 일인데 자바에서는 두 가지 방식으로 값을 호출한다. 1. Call by value(값에 의한 호출) 함수가 호출될 때 메모리 공간 안에서는 임시의 공간이 생성된다. 그리고 함수가 종료되면 해당공간은 사라진다. 함수 호출시 전달되는 변수의 값을 복사하여 함수의 인자로 전달한다. 복사된 인자는 함수 안에서 지역적으로 사용하는 변수이다. 기본 자료형 : call by value 로 동작 (int, short, long, float, double, char, boolean) 2. Call by reference(참조에 의한 호출) 함수가 호출.. 더보기 [Git]git format-patch를 사용하는 방법 간혹 로컬 환경에서 개발한 사항을 실제 운영에 반영하고자 할때, 대상 운영서버가 폐쇄망으로 되어 있어 로컬에서 커밋내역을 바로 push 할 수 없는 경우가 있다. 그럴때 사용할 수 있는 방법이 patch 명령어이다. git format-patch -2[반영하고자 하는 커밋 수] 의 방법으로 커밋 이력을 하나의 파일로 생성할 수 있다. 해당 파일들을 반영하고자 하는 소스코드가 적용된 곳으로 옮긴 뒤, git am 0001file[파일명]을 통해 커밋 이력을 반영시킬 수 있다. 더보기 [Java]순수 자바 코드로 DIP와 OCP를 준수하는 방법 Service 인터페이스와 ServiceImpl 클래스로 서비스를 구현받는 구조를 통해 추상화 - 구체화를 구축하여도, 실제 비즈니스 로직을 수행하기 위해 new 연산자를 통해 객체를 생성할때는 실행되는 ServiceImpl 클래스를 new 로 선언하여 생성하게 된다. ex) private final Service service = new ServiceImpl(); 형식으로 객체 생성 이런식으로 구현하게 되면, 추상화가 잘 되어 있다 하더라도, 객체의 생성에 있어서 구체화 된 클래스를 호출해야 하므로 DIP(의존관계 역전원칙 : 프로그래머는 "구체화"보다 "추상화"에 의존해야 한다. 뿐만 아니라 구체화된 클래스의 변경이 발생할때 Service를 호출하는 클라이언트 단을 수정해야 하므로, OCP(개방 폐쇠.. 더보기 이전 1 ··· 4 5 6 7 8 9 10 다음