코딩테스트를 풀이 중, 나는 자료구조를 변경하는 일이 나에겐 종종 생긴다. 왜 처음부터 딱 맞는 자료구조를 고르지 못할까? 하는 생각이 들었다. 그 이유가 제대로 이해를 하지 못하고 있어서라고 생각했고, 자료구조에 대해 한 번 더 정리하기 위해 포스팅을 하려한다! Collection 이란? 컬렉션이란, 객체의 그룹을 조작하고 저장할 수 있는 자료구조 이다. 각각 제너릭을 통해 특정 타입의 컬렉션을 생성할 수 있고, 각 특징에 알맞은 상황에 적합한 것을 골라 쓰는 것이 좋다. 먼저 컬렉션의 종류는 굉장히 많은데, 크게 List, Queue, Set 으로 나뉜다. List List는 배열처럼 흔히 쓰이는 순서(인덱스)를 가지는 원소들의 모임으로, 중복값을 가질 수 있다. ArrayList, LinkedLis..
프록시 패턴에 대해 공부하면서, AOP에 대해 자세히 정리해봐야겠다고 느꼈다! 오늘은 AOP에 대해서 알아보도록 하자. 서비스에서 필요한 내용은 비지니스 로직이라고 불리는 핵심 기능만 수행할 수 있으면 된다. 그 외 권한, 사용 시간 체크, 트랜잭션을 거는 것 등은 인프라 로직이라고 한다. 인프라 로직 애플리케이션의 전 영역에서 나타날 수 있음 중복코드를 만들어낼 가능성 때문에 유지보수가 힘들어짐 비지니스 로직과 함께 있으면 비지니스 로직을 이해하기 어려워짐 예를들어 위 기능 들에서 공통적으로 나타나는 색깔 블럭들은 중복되는 메소드, 필드, 또는 코드 등이다. 만약 로그인 기능에서 성능 검사에 대한 코드를 수정해야한다면, 글 작성 기능과 삭제 기능의 성능 검사도 전부 찾아 수정해야한다. 이는 SOLID원..
특정 객체에 대한 접근을 제어하거나 기능을 추가할 수 있는 패턴이다. 요청을 proxy라는 대리인을 거쳐서 쓰는 패턴이다 = 초기화 지연, 접근 제어, 로깅, 캐싱, 액세스 권한 확인 등 사용 가능 → 성능 향상 클라이언트 → realSubject (X) 클라이언트 → Proxy → realSubject (O) 기존에 생성된 class 코드를 변경하지 않고 사용 하는 방법 기존에 작성된 GameService의 startGame()의 실행시간까지 알고 싶을 때 GameService를 상속받은 GameServiceProxy를 생성 (재정의 하여 사용) public class GameService { public void startGame() { System.out.println("이 자리에 오신 여러분을 진..
싱글톤 패턴은 객체의 인스턴스가 오직 1개만 생성 되는 패턴 이다. 시스템 런타임, 환경세팅에 대한 정보 등, 인스턴스가 여러개 일 때 문제가 생길 수 있는 경우가 있다. 인스턴스를 오직 한개만 만들어 제공하는 클래스가 필요하다. 예를 들어, 설정 화면은 딱 하나의 인스턴스에서만 변경할 수 있게 해야한다. 어떤 설정에서는 엔터가 저장이고, 다른 설정에서는 클릭이 저장이면 헷갈릴 것이다. 이러한 경우 처럼 딱 하나만 필요한 경우가 존재하기 때문에 싱클톤 패턴이 존재한다. 싱글톤 패턴을 사용하는 이유 메모리 측면 (한번의 new를 통해 고정된 메모리 영역을 사용) → 속도 향상의 이점 데이터 공유가 쉽다 (싱글톤 인스턴스가 전역으로 사용되는 인스턴스이기 때문에 다른 클래스의 인스턴스들에서 접근하여 사용 가능..
저번 달, 생애 처음으로 봤던 한 기업의 면접에서 이런 질문을 받았다. 'JPA와 MyBatis의 차이를 설명해줄 수 있나요?' 나는 프로젝트에 JPA를 사용했었고, 그에 따라온 꼬리 질문이었다. 면접 전 JPA와 MyBatis의 차이에 대해서 준비를 하고 갔음에도 불구하고, 막상 면접을 하니 '내가 이해한 정도' 의 차이점만 말할 수 있더라. 그래서 오늘 이 기회에 JPA와 MyBatis에 대해 더 자세히 정리해보고자 한다. JDBC 먼저 JPA 와 MyBatis 를 얘기하기 전에, MyBatis 이전에 사용되었던 JDBC에 대해 간단히 정리해보자. 자바에서는 자바를 이용해서 DB를 사용하기 위해 기본적으로 JDBC 라이브러리가 제공되었다. 하지만 JDBC는 가독성이 떨어지고 반복적인 코드가 만들어질 ..
사실 회고라는 것에 중요하게 생각해 본 적은 없는데, 나 자신의 성장을 기록하기 위해 이제부터 가끔씩이라도 회고록을 작성해보려고 한다. 졸업 후... 9월 말에 대학원 졸업을 하고, 한국으로 돌아왔다. 졸업 전에 일주일 정도 짧게 여행을 다니며 취업 방향에 대해 고민을 했었다. (아무래도 현지에서 취직을 하는 게 유리한 것은 맞았다. 세계 랭킹이 높다해도 우리나라에서는 잘 모르는 대학이니까.. ㅠ.ㅜ) 그런데 내가 벨기에에 가있는 동안 반려견 기영이의 상태가 안좋아지게 되었고, 한국에서 취직을 준비하기로 결정했다. 물론 한국에 돌아오게 된 것이 기영이가 주된 결정 요인은 아니고, 아무래도 한국은 IT 강국이고, 유럽쪽은 그 분야에서 발전이 좀 느리다보니 한국에서 취직을 하고 경력을 쌓는 게 내가 더 발전..
더보기 1 EC2 서버 구축 2 EC2 탄력적 IP 할당 3 EC2 서버 접속 4 배포 환경 구축 5 jar 파일 생성 및 EC2 서버에 배포 6 nohup 을 이용한 무중단 배포 # nohup 이란? nohup은 no hang up의 약자로, '끊지 마'라는 뜻을 가지고 있다. 즉, 세션을 종료하더라도 실행중인 프로그램은 종료하지 않도록 하는 명령어이다. 저번 시간에 했던 저버 배포를 예시로 들어보자면, java -jar 빌드한파일이름.jar 위 명령어를 실행시켰을시, 배포한 웹페이지에 접속은 잘 되지만 만약 터미널을 닫았거나, 컴퓨터를 장시간 쓰지 않았을 때는 실행이 중지된 것을 볼 수 있다. 이럴 때 필요한 것이 바로 무중단 배포를 도와주는 nohup 명령어 인 것이다. # nohup 을 사용하는 ..
더보기 1 EC2 서버 구축 2 EC2 탄력적 IP 할당 3 EC2 서버 접속 4 배포 환경 구축 5 jar 파일 생성 및 EC2 서버에 배포 6 nohup 을 이용한 무중단 배포 # 5 jar 파일 생성 jar 파일과 war 파일의 차이점 은 이전 포스팅으로 알았으니 이제 JAR 파일을 생성해보자! 1) JAR 파일 빌드 (Maven) 터미널에서 프로젝트 디렉토리로 이동한 뒤, 아래 명령어를 입력해준다. mvn package 그리고 프로젝트 디렉토리 안의 target 폴더 안에 가면, 위와 같이 .jar 파일이 만들어진 것을 볼 수 있다. 그럼 이제 터미널 창에서 target 디렉토리 안으로 이동한 뒤, 아래 명령어를 입력해보자. java -jar 빌드한파일이름.jar // java -jar lastf..