전체 글

전체 글

    [Maven] Maven이란? (feat. Maven lifecycle)

    아마 스프링 개발을 해보신 경험이 있으신 분이라면 Maven 이나 Gradle 이라는 빌드 툴에 익숙하실것 같습니다. 오늘은 그중 Maven 에 대해서 알아보겠습니다! 빌드(Build)란? 소스코드를 컴퓨터에서 실행할 수 있는 독립적인 형태(war, jar 등등)로 면환하여 JVM이나 WAS가 인식할 수 있는 구조로 패키징하는 과정과 그 결과물을 말합니다. 예를 들어 Java 프로젝트를 생성한다면, 소스코드를 컴파일해서 .class 파일로 변환하고 resource 를 .class에서 참조할 수 있는 적절한 위치로 옮기고 하나로 압축하는 과정을 의미합니다. 빌드 툴(Build tool)이란? 빌드 툴, 빌드 도구는 프로젝트 생성, 테스트 빌드, 배포등의 작업을 위한 전용 프로그램입니다. 당연히 직접 모든 ..

    [Spring] @Transactional 어노테이션 동작방식

    서버개발을 하다보면 특히 DB와 연동되는 부분에서 @Transactional 어노테이션이 자주 쓰입니다. 어노테이션을 붙여주는 것만으로도 DB에 수행되는 쿼리들을 하나의 transaction으로 묶어줄 수 있으며, 속성에 따라서는 exception 종류에 따라 rollback 도 가능합니다. 어떻게 어노테이션을 붙여주는 것만으로도 이것이 가능할까요? 지금부터 알아봅시다. @Transactional 어노테이션은 Proxy 방식으로 동작한다 "어노테이션을 붙여서 Proxy 방식으로 동작한다" 어디서 많이 보시지 않았나요? 네 맞습니다. @Transactional 어노테이션은 Spring AOP의 대표적인 예입니다. 혹시 AOP에 대해 아직 모르신다면 아래 글을 먼저 읽고 와주세요! [Spring] AOP -..

    [Java] 예외(Exception)의 종류

    개발하면서 절대 안마주쳤으면 하지만 결국에는 마주하게되는게 바로 예외인 것 같습니다. 이 예외에도 큰 틀에서 종류가 존재한다는 것을 알고 계셨나요? 지금부터 바로 알아보겠습니다! 예외(Exception)와 에러(Error)는 다르다 예외를 설명하기전에 우선 예외와 에러에 대해서 간단히 짚고 넘어가겠습니다. 우리는 보통 예외가 발생하면 에러가 발생했다고 생각합니다. 하지만 Java에서 예외와 에러는 엄연히 다른 개념입니다! 에러(Error): 에러는 자바 프로그램 밖에서 발생한 오류를 뜻합니다. 예시로 프로그램이 동작하는 서버 자체가 고장이 났다거나, OS에 비정상적인 상황이 발생해서 JVM이 제대로 실행될 수 없는 경우 등이 있습니다. 예시를 보면 아시겠지만 에러는 애플리케이션 내 코드로 해결할 수 없기..

    [Java] String과 String Constant Pool

    String은 자바에서 자주 쓰이는 자료구조이자 어떻게 보면 특별하 자료구조인데요! 오늘은 자바의 String에 대해서 살짝 깊게 다뤄보겠습니다~!! String 이란? 먼저 프로그래밍 언어에 제약되지않은 String이라는 개념에 대해서 설명해보려고 합니다. 너무도 당연한 얘기지만 자바에서 String을 설명하려면 꼭 필요하기 때문입니다. String은 한국어로 문자열이라고도 부르는데요, 여러 문자(Character)들이 모여서 하나의 집합으로 이루어진것을 우리는 문자열이라고 부릅니다. 그래서 그런지 자바 이전에 등장했던 C 에서는 String이라는 자료구조가 따로 존재하지 않습니다. 문자열을 사용해야할때는 char* (포인터) 또는 char[] (배열)의 형태로 문자열을 간접적으로 나타내죠. C++ 에..

    [보안] SHA 암호화 알고리즘

    오늘은 SHA 암호화에 대해서 알아보겠습니다. 아마 로그인, 회원가입등의 개인정보를 저장하거나 처리할때 많이 들어보셨을 것 같습니다. 자 지금부터 알아볼까요? SHA란? SHA는 Secure Hash Algorithm의 줄임말입니다. 따라서 해석하면 해시를 이용한 암호화 알고리즘이라고 보시면 됩니다. SHA의 종류는 크게, sha-0, sha-1, sha-2로 나뉩니다. 당연하게도 숫자가 높아질수록 더 높은 버전이며, sha-0은 최초의 sha 함수를 뜻하고, 여러 변형을 거쳐서 sha-1 그리고 현재는 sha-224, sha-256, sha-384, sha-512를 아우르는 sha-2까지 등장했습니다. sha-0, sha-1은 160비트의 해시값을 만들어내는 방식이고, 특히 sha-1은 SSL, TLS..

    [JPA] 비관적 락(Pessimistic Lock)과 낙관적 락(Optimistic Lock)

    JPA를 사용할때는 Transaction에 대한 격리 수준이 존재합니다. 여기서 @Transactional 어노테이션에 대해서 다루었었죠. 어노테이션의 기본값은 DB의 격리정책과 동일하게 가는 것으로 돼있는데, 대부분의 데이터베이스들은 ACID 원칙에서 격리성(Isolation)을 만족시키기 위해 READ COMMITED 수준을 사용합니다. 트랜잭션의 ACID 특성 원자성 (Atomicity): 부분적으로만 실행되거나 중단되지않는 것을 보장 일관성 (Consistency): 트랜잭션이 완료되면 일관적인 DB상태를 유지 격리성 (Isolation): 트랜잭션 수행시 다른 트랜잭션이 끼어들지 못하도록 보장 지속성(Durabuility): 성공적으로 수행된 트랜잭션은 영원히 반영 격리 수준에는 대표적으로 다음..

    [네트워크] 분산 서버 환경에서 세션공유 문제 해결법

    일반적으로 많은 사람들이 이용하는 서비스는 하나의 서버로 모든 부하를 감당할 수 없어서, 로드 밸런서를 이용한 분산서버 구조를 활용해서 문제를 해결합니다. 그리고 클라이언트와 서버는 HTTP로 통신을 하겠죠. 근데 HTTP의 한가지 특성때문에 위 그림과 같은 구조에는 문제가 발생할 수 있습니다. 바로 HTTP는 무상태(Stateless) 프로토콜이라는 것이죠. **혹시 HTTP에 대한 글을 안보셨다면 여기를 먼저 보고 와주세요! 즉 다시 말하면 서버는 클라이언트의 상태를 저장하지 않고 각각의 요청을 독립적인 트랜잭션으로 취급한다는 의미입니다. 이게 왜 문제가되죠?? 서비스별로 특정 이유로 session 을 사용하여 현재 사용자의 상태를 저장하고 저장된 데이터를 사용해야 상황이 발생할 수 있습니다. ses..

    [네트워크] HTTP vs HTTPS

    저번시간에 여기서 웹의 시초격 통신 프로토콜이라고 볼 수 있는 HTTP에 대해서 알아보았습니다. 그런데 막상 웹페이지를 방문해보시면 http보다는 https로 시작하는 주소가 더 많이보이고, 주소가 http로 시작하는 경우에는 안전하지 않다는 경고를 찾아볼 수 있습니다. 왜 이런걸까요?? 오늘은 이 http와 https의 차이에 대해 알아보겠습니다! HTTP의 특징 HTTP에서는 여기에서 이미 한번 설명을 했었죠. 하지만 한번더 간단하게 HTTP의 특징에 대해 요약을 하겠습니다 클라이언트-서버 방식: 클라이언트가 서버에 요청을 보내고 응답을 받는 형식 무상태성(stateless): 서버측에서 클라이언트의 상태를 유지/저장하지 않음 비연결성/연결성 초기버전 HTTP/1.0 이전: 비연결지향, 한번 요청/응..

    [Java] Set Collection (HashSet, TreeSet, LinkedHashSet)

    Set은 List와 더불어 엄청 자주쓰이는 인터페이스입니다. 둘다 Collection 인터페이스를 기반으로 구현한 클래스이고 List는 선형 자료구조를 구현한 클래스, Set은 비선형 자료를 구현한 클래스로 사용됩니다. 오늘은 Set의 인터페이스를 구현한 HashSet, TreeSet, LinkedHashSet에 대해서 알아보겠습니다 HashSet 가장 일반적으로 많이 쓰이는 자료구조입니다. 해싱을 사용하여 데이터를 주소에 저장합니다 데이터의 중복을 허용하지 않습니다 데이터의 저장 순서를 보장하지 않습니다 탐색비용은 O(1)로 검색으로 사용하기에 가장 빠릅니다. TreeSet 이진탐색트리의 형태로 데이터를 저장하는 컬렉션입니다. 이진탐색트리 중에서도 성능을 향상시킨 'red-black tree'로 구현되..

    [네트워크] TCP와 UDP

    네트워크 OSI 7계층을 기억하시나요? 응표가 한세트하고 내 대신 물달래 에서 "트"를 담당하는 "Transport, 전송계층"에서 대표적인 프로토콜로 TCP와 UDP가 있다고 했었죠. 오늘은 이 TCP와 UDP에 대해서 알아봅시다! TCP (Transmission Control Protocol) TCP는 신뢰성있는 데이터 전송을 지원하는 연결형 프로토콜입니다! 일반적으로 TCP는 IP와 함께 사용되는데, IP가 데이터의 전송을 처리한다면, TCP는 패킷을 추적하고 관리하게 됩니다. 패킷(Packet)이 뭐에요? 인터넷으로 데이터를 보낼때 효율적으로 하기 위해서 보내는 데이터를 조각조각으로 나누어 전송하는데 이 조각을 패킷이라고 부릅니다! 패킷을 추적하고 관리한다는 뜻은 뭔가요? 패킷이 데이터 조각이라고..