전체 글
-
NAT와 포트포워딩 - 패킷의 IP와 Port 번호 변환하기Computer Science/Network 2021. 11. 1. 22:23
NAT : Network Address Translation IP 패킷의 TCP/UDP Port Number와 출발지(Source), 목적지(Destination) IP 주소를 재기록 하면서 라우터를 통해 네트워크 트래픽을 주고 받는 기술 위의 그림처럼 Host - Router - Server를 거치는 과정에서 패킷은 많은 네트워크 단말을 거치게 되는데, 그 과정에서 출발지의 (IP, Port Num)과 도착지의 (IP, Port Num)과 같은 데이터는 계속해서 변할 수 있다. 패킷에 변화가 생기기 때문에 IP나 TCP/UDP의 체크섬도 다시 계산해서 재기록해야 한다. IPv4를 사용할 때 가능한 최대 IP 개수는 255^4 = 4,228,250,625(약 40억)로 한정되어 있기 때문에, 제한된 수의..
-
DB의 비정상 수행을 유발하는 SQL Injection을 예방하기Computer Science/Database 2021. 10. 31. 15:34
SQL Injection 이란? SQL Injection이란 SQL 쿼리문을 조작할 수 있는 입력을 사용해서 데이터를 악의적으로 이용하거나 탈취할 수 있는 공격을 의미한다. 주로 로그인, 사용자 입력 창에서 입력 값에 대한 검증 로직이 빈약할 경우 발생할 수 있으며 이로 인한 피해는 인증 우회/원격 명령 실행/DB 정보 수정,삭제,탈취와 같은 피해가 발생할 수 있다. 2017년 우리나라 숙박 애플리케이션 여기어때도 SQL Injection으로 인해 고객 정보를 탈취당한 사례가 있다. public List unsafeFindAccountsByCustomerId(String customerId) throws SQLException { // UNSAFE !!! DON'T DO THIS !!! Strin..
-
단위테스트가 도대체 뭐야 ❓Project 2021. 10. 27. 15:57
단위테스트 하나의 API 기능을 개발하고 수정했을 때, 모든 테스트케이스를 개발자가 직접 수행해서 성공/실패 여부를 판별하는 것은 인적 리소스 낭비일 뿐 아니라 제대로 테스트를 수행하기 힘들다 단위 테스트는 하나의 모듈을 기준으로 독립적으로 수행 되는 최소 단위의 테스트 모듈을 애플리케이션 내의 하나의 기능 / 메서드 / API로 이해하면 특정 메서드에 대한 테스트의 집합이 하나의 단위 테스트가 될 수 있다 스프링/다른 컨테이너로부터 격리된 환경에서 테스트가 가능해야 한다는 목적을 가지고 있다 ❗ 프로젝트 빌드 시 테스트를 통과하지 못하면 배포되지 못하게 하는 용도로 많이 활용된다 단위 테스트 규칙 단위 테스트에서 강조하는 것으로 클린코드에서 언급한 FIRST 규칙이 있다 Fast 테스트는 자주 실행되어..
-
실시간 시스템 구현을 위한 WebSocket의 이해Web 2021. 10. 22. 17:14
WebSocket에 대해 깊이있게 이해하기 위해 Spring 공식 문서를 보면서 다시 공부해봤다. 이번 글에서는 Raw 웹소켓 상호작용을 포함하는 웹소켓 메시징 방식에 대해 알아본다. 다음 글에서는 WebSocket 스택이 지원되지 않는 브라우저에서도 에뮬레이션을 지원하는 SockJS, Pub/Sub 모델 기반의 하위 프로토콜인 STOMP에 대해 다루고자 한다. Introduction to WebSocket 웹 소켓 프로토콜은 단일 TCP 연결을 통해 클라이언트-서버 간 양방향 통신 채널의 설정을 제공한다. HTTP와는 다른 프로토콜이지만 HTTP 위에서 작동할 수 있도록 설계되어 Port 80과 443을 사용하고 기존의 방화벽 규칙을 사용할 수 있다. WebSocket 상호 작용은 HTTP Upgrad..
-
STOMP와 WebSocket으로 아주 간단한 메시징 시스템 만들기Spring 2021. 10. 19. 21:56
Using WebSocket to build an interactive web application 해당 프로젝트는 아래의 링크를 참고하여 구현했습니다. https://spring.io/guides/gs/messaging-stomp-websocket 이 프로젝트는 브라우저-서버 간 메시지를 주고받는 응용프로그램을 작성하는 과정을 안내한다. WebSocket은 TCP위의 계층으로, 하위 프로토콜을 사용해서 메시지를 포함하기 적합하다. 이 미니 프로젝트에서는 Spring과 함께 STOMP 메시징을 사용해서 대화영 웹 애플리케이션을 구현한다. STOMP는 하위 레벨 웹소켓 위에서 동작하는 프로토콜이다. Project Initialize https://start.spring.io/ 에서 위와 같은 설정으로 프로..
-
Thread-Safe: Multi-Thread 환경에서 동시성을 제어하기Programming/Java 2021. 10. 17. 00:19
https://2jinishappy.tistory.com/323 Java에서 Thread를 사용하는 방법 애플리케이션의 구현이 복잡해지면서 CS 기초 특히 트랜잭션, 쓰레드를 제대로 이해해야 겠다고 느꼈다. 그래서 쓰레드의 정의, 자바에서의 쓰레드 사용법, Thread-Safe 구현 방식, Thread-Safe Collection 2jinishappy.tistory.com Thread-Safe Java 환경에서는 개발자가 쉽게 다중의 Thread를 생성하고 사용할 수 있다. 여러 쓰레드의 바이트 코드를 동시에 실행시키는 멀티 쓰레딩은 애플리케이션 성능을 향상시킬 수 있지만, Resource를 공유하기 때문에 안전한 접근 방식이 필요하다. 즉, Multiple Thread를 사용할 때 에는 Thread-S..
-
Spring Dependency Injection의 종류 - Constructor, Setter, FieldSpring 2021. 10. 16. 00:51
Field Dependency Injection(@Autowired) @AutoWired ❓ Spring Framework에서 지원하는 Dependency 정의 용도의 Annotation Spring 종속적이지만 정밀한 Dependency Injection이 필요한 경우 유용함 해당 어노테이션을 사용해 Bean을 등록할 경우 Injection의 대상이 되는 클래스의 형식은 하나여야 한다(하지만 @Qualifier를 이용해 Injection할 Component의 대상을 지정해줄 수 있다) @Service public class Item { @Autowired private final Pizza pizza; @Autowired private final Burger burger; } @Autowired 어노테..
-
Spring에서는 DI를 통해 IoC를 구현한다Spring 2021. 10. 16. 00:47
IoC - Inversion of Control : 객체의 종속성을 다음의 방식을 통해서만 정의하는 방식을 말한다. Spring에서는 Dependency Injection으로 구현되었다. 생성자 인수 팩토리 메서드의 인수 팩토리 메서드에서 생성되거나 반환되어 객체 인스턴스에 설정된 속성 컨테이너는 빈을 생성할 때 의존성을 주입하므로 Compile Time이 아닌 Runtime에 객체 간의 의존 관계가 결정된다. 따라서 객체 간의 관계가 느슨하게 연결된다(loose coupling). org.springframework.beans와 org.springframework.context package는 Spring Framework의 IoC 컨테이너를 담당한다. BeanFactory : 모든 유형의 객체를 관리..