728x90

전체 글 288

Proxy Server

프록시 서버는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다. 프록시 서버는 일반적으로 보안이 중요한 망분리 환경이나 로드벨런싱이 필요한 분산처리 환경에서 필수로 사용되는데 들어오고 나가는 트래픽에 대해 프록시 서버에서 공통으로 관리할 수 있기 때문이다. Forward Proxy, Reverse Proxy 이처럼 중간에서 대리로 통신을 수행하는 것을 가리켜 '프록시' 라고 하는데 프록시는 네트워크의 출발지가 어디냐에 따라 포워드 프록시, 리버스 프록시로 구분된다. 별거 없다. 출발지가 내부망이라면 포워드 프록시 외부망이라면 리버스 프록시가 된다.

Base/OS, Network 2021.08.06

Ajax와 @RequestBody, @ResponseBody

너무 단순한 주제지만 프로젝트를 분석하다보면 잘못 사용된 경우도 있고 나도 제대로 알지 못하고 사용했던 부분이 있어 정리해놓는다. 우선 아래와 같은 Controller 메소드가 있다고 가정해보자. 해당 메소드에서는 @RequestBody 에 의해 request body 에 있는 json 문자열을 Map 타입 payload로 역직렬화 해서 읽어오고 @ResponseBody 에 의해 Map 타입 map 을 json 문자열로 직렬화해서 리턴한다. @PostMapping("/update") @ResponseBody public Map update(@RequestBody Map payload) { Map map = new HashMap(); map.put("test", "test"); return map; } 위..

Backend/Spring+Boot 2021.08.04

@RestController 와 ModelAndView 그리고 @ModelAttribute

요즘은 백앤드와 프론트앤드를 완전히 나눠서 개발하기 때문에 백앤드에서 ModelAndView 를 사용할 일은 거의 없다. 즉, 백앤드에서는 Api개발에 그외 성능 개선이나 인프라 적인 요소에 집중하게 된다. 하지만 일부 간단한 프로젝트에서는 아직도 백앤드에서 풀스택으로 개발하는 경우가 많으며 그때는 ModelAndView 가 많이 사용된다. 이 경우 Controller 에 @RestController를 지정해야 할까 @Controller 를 지정해야 할까? 정석은 api형태의 컨트롤러와 view형태의 컨트롤러를 클래스로 분리해서 각각 @RestController 와 @Controller 를 지정하는 것인데 view형태의 컨트롤러를 사용한다는 것은 이미 소규모 프로젝트라는 말이고 굳이 컨트롤러를 나눠서 작..

카테고리 없음 2021.08.04

@RequestParam, @ModelAttribute 생략

Spring 기반 프로젝트에서 Controller 내부 메소드의 인자에 지정하는 어노테이션이다. 일반적으로 primitive type은 @ReuqestParam 로 지정하고 reference type 은 @ModelAttribute 로 지정한다. 그런데 만약 이를 생략하면 어떻게 되나? primitive type는 자동으로 @ReuqestParam을 지정한 것처럼 동작하고 reference type은 자동으로 @ModelAttribute를 지정한 것처럼 동작한다. 그런데 또 한가지 중요한 사실이 있으니 @ReuqestParam 의 required 는 default 가 true로 요청시 해당 파라미터가 존재하지 않으면 기본적으로 에러가 발생한다. 파라미터로 primitive type 를 사용하고 @Reuq..

Backend/Spring+Boot 2021.08.04

맥북 Big sur 한/영 딜레이 해결

맥북에서의 한/영 전환키는 command+space 키 였는데 시에라 버전부터 CapsLock 키를 한/영 전환키로 사용할 수 있다. 그런데 문제는 CapsLock 본연의 기능인 영문 대소문자 변경 기능도 있다보니 각각의 기능에 딜레이가 발생한다. 이게 평소에는 그냥 참고 쓸만한데 맥북을 오래 켜놓고 쓰다보면 어느순간 감당하지 못할만큼 느려질 때가 있다. 너무 느려서 CapsLock 키를 한번 누르고 10초 이상 마우스 커서에 무지개 회전이 발생하는 경우도 있고 여기서 끝나지 않고 딜레이가 너무 심해서 한/영 전환 자체가 안되는 경우도 있다. 서칭을 해보니 대부분 CapsLock의 기능 중 하나인 대소문자 기능을 없애서 딜레이를 해결하고 있었는데 나는 대소문자 기능도 유지하고 싶었다. 그래서 나는 한/영..

ETC 2021.08.04

Thymeleaf 훑어보기

기본적인 개발 방식 일반적으로 화면을 구성할 때 top, footer 영역은 거의 변하지 않고 content 영역만 달라진다. 이에 Thymeleaf 는 기본적으로 top, content, footer 의 배치가 정의된 레이아웃을 html 로 미리 만들어 놓고 이를 이용해서 실제 페이지를 만드는 방식을 사용한다. 레이아웃도 여러개를 만들어서 사용할 수 있고 여기에 사용되는 top, footer 는 거의 변하지 않으므로 일반적으로 특정 html 로 생성해놓고 재활용하는데 이를 컴포넌트라고 명명한다. 이는 jsp 의 include 방식과 비슷하다. 결국 레이아웃에는 top, content, footer 가 정의되어 있지만 content 의 실제 구현부는 비어있는 상태로 정의되고 실제 페이지 개발시 conte..

Backend/Spring+Boot 2021.07.30

의존성 주입시 중복되는 타입에 대한 처리

특정 클래스의 의존성을 주입하려고 할 때 동일한 타입이 여러개 존재하는 경우가 있을 수 있다. 하나의 Interface 를 다수의 클래스에서 implements 해서 다형성을 구현한 경우가 바로 그것인데 @Autowired 를 통한 의존성 주입이나 생성자를 통한 의존성 주입 모두 타입을 기준으로 하기 때문에 이 경우 적절한 Bean을 결정하지 못해 의존성 주입이 실패한다. 이 때는 일반적으로 @Qualifier 어노테이션을 통해 Bean id 를 명시해주면 해당 의존성이 정상적으로 주입된다. 하지만 이것 말고도 의존성을 주입하려는 클래스 변수의 명칭을 Bean id로 만들면 @Qualifier 어노테이션을 명시한 것과 동일한 효과를 볼 수 있다. 뭔가 더 간단하고 쉬운 방법인 것 같지만 서칭을 해보니 이..

Backend/Spring+Boot 2021.07.23

Spring에서 권장되는 의존성 주입 방법

A클래스에서 B클래스의 메소드를 사용하려면 A클래스에서 B클래스를 인스턴스화 해서 사용해야 한다. 이 때 B를 A의 의존성이라고 하고 B의 인스턴스를 생성하는 것을 의존성을 주입한다고 표현한다. 이러한 연결을 위해 일반적으로 A클래스에서 코드상 new B() 를 통해 B의 의존성을 직접 주입해야 하지만 Spring 환경이라면 이러한 의존성성 주입을 Spring에서 담당해준다. 하지만 컨테이너에게 의존성을 주입해 달라는 액션을 취해야 하는데 그 방법은 아래와 같이 세 가지가 있다. 생성자 정의 Setter 메소드 정의 필드에 @Autowired 지정 이 중 권장되는 방식은 생성자 정의 방식이다. 여러 이유가 있겠지만 개인적으로 많이 공감했던 내용 위주로 정리해본다. Setter 메소드 정의 방식의 경우 기..

Backend/Spring+Boot 2021.07.23
728x90