POJO 자바나 스프링 프레임워크를 조금이라도 공부 해본 개발자 (혹은 학생)이라면 POJO 라는 단어를 한번쯤 듣게됩니다. POJO의 정의는 사실 그렇게 어렵지 않습니다. 아래 내용은 위키 백과에 나와있는 POJO에 대한 설명입니다. Plain Old Java Object, 간단히 POJO는 말 그대로 해석을 하면 오래된 방식의 간단한 자바 오브젝트라는 말로서 Java EE 등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크에 종속된 "무거운" 객체를 만들게 된 것에 반발해서 사용되게 된 용어이다. 2000년 9월에 마틴 파울러, 레베카 파슨, 조쉬 맥킨지 등이 사용하기 시작한 용어로서 마틴 파울러는 다음과 같이 그 기원을 밝히고 있다. [1] “ 우리는 사람들이 자기네 시스템에 보통의 객체를 사..
프로그래머스 알고리즘 - 더 맵게 ☞ 프로그래머스 '더 맵게' 문제링크 음식 중에 가장 덜 매운 2가지의 음식을 반복적으로 선택해야 합니다. 우선순위 큐(Priority Queue)를 사용하면 가장 덜 매운 2가지 음식을 찾기 편합니다. 우선순위 큐에 대한 내용은 이전 포스팅에 있습니다. ☞ 우선순위 큐 - Java에서 다루기 풀이코드 (java) class Solution { public int solution(int[] scoville, int K) { int answer = 0; PriorityQueue priorityQueue = new PriorityQueue(); //우선순위 큐에 음식 담아주기 for (int i : scoville) { priorityQueue.add(i); } //가장 덜..
우선순위 큐(Priority Queue) 일반적인 큐는 제일 먼저 들어간 데이터가 가장 먼저 나오게 되는 자료구조 입니다. 대표적인 예로는 은행업무를 기다리는 손님들의 대기열 입니다. 이런 큐의 특성과 달린 우선순위 큐(Priority Queue)는 들어간 순서에 상관없이 일정한 규칙에 따라 우선순위를 선정하고, 우선순위가 가장 높은 데이터가 가장 먼저 나오게 됩니다. 대표적인 예로는 병원의 응급환자를 생각하면 됩니다. 은행과 달리 위급한 우선순위에 따라 먼저 처리되기 때문입니다. 우선순위 큐 사용하기 우선순위 큐도 Java내부적으로 구현이 되어 있습니다. 일반적인 큐를 사용하는 것처럼 add(); peek(); poll(); 등의 메소드를 사용할 수 있습니다. PriorityQueue priorityQ..
JPA 그래프 탐색 JPA를 사용하기 위해서 만든 도메인 객체 A,B가 있다고 가정해보자. A객체가 B객체에 대한 방향을 갖는다고 할 때, A객체는 B객체의 그래프 탐색이 가능하다. (쉽게 말하면 A.getB를 이용해서 B정보를 가져 올 수 있다는 점이다.) 근데 엄청난 착각을 하고 있었다. A객체는 B객체를 Lazy하게 가져온다고 했을 때, 그래프 탐색이 가능한 범위의 레이어는 컨트롤러단 까지라고 생각했다. 뷰단에서는 막연하게 응답 이후에 처리 된다고 생각했는데, 스프링MVC 구조를 떠올리지 못했다. 위의 사진은 스프링 MVC의 구조를 잘 나타내고 있다. 요청부터 응답까지 어떤 과정으로 되어 있는지 도식화 해두었다. A객체가 B객체의 그래프 탐색이 가능한 범위는 위의 사진에 나와있는 모든 단계에서 가능..
메소드(함수) 호출 방식 프로그래밍 언어에서 변수를 다른 함수의 인자로 넘겨 줄 수 있습니다. 이 때 이 변수의 '값'을 넘겨 주는 호출 방식을 Call by Value, 이 변수의 '참조값' (혹은 주소, 포인터)를 넘겨 주는 호출 방식을 Call by Reference라고 합니다. (이외에도 Call by Assignment, Call by Name 등의 개념이 있다고 들었습니다.) 자바는 Call by Value 방식으로 동작하게 되는데 이를 증명 해 볼 수 있는 대표적인 예제가 변수의 값을 바꿔보는 함수(메소드)가 있습니다. public static void main(String[] args) { int a = 1; int b = 2; swap(a, b); System.out.println(a);..
개요 변경된 파일들을 확인하고 스테이지에 올리기 위해서는 git add라는 명령어를 사용하게 됩니다. 그리고 스테이지에 올리기 전에 변경된 파일과 코드들을 확인해 보기 위해서는 git status (변경된 파일 상태보기), git diff (스테이지에 올라가지 않은 파일들의 변경사항 보기) 명령어로 판단 할 수있습니다. 하지만 여러 파일을 수정하고 스테이지에 올리는 경우, 커밋 의도에 맞는 변경 사항이 적용 됐는지 일일이 확인하는 것은 상당히 귀찮은 일이고, 스테이지에 올리지 않게 수정하거나, 스테이지에 올라갈 파일들만 골라내는 작업도 시간을 많이 소모하게 됩니다. 이러한 문제는 git add를 사용하지 않고 git add -p라는 명령어를 사용하면 쉽게 해결 할 수 있습니다. git add -p git..
로그인 여부 & 권한 여부 확인하기 로그인 하지 않은 사용자에게 '로그인' 메뉴가 노출되지만, 로그인 한 사용자에게는 '로그인' 메뉴가 사라지고, 혹은 관리자 권한을 가진 유저에게만 관리자페이지로 가는 메뉴를 노출해야 하는 일은 프론트 구현 과정에서 필수적인 과정이다. 기존에는 세션을 이용하여서 직접 유저의 권한과 로그인 여부를 확인했었지만 스프링 시큐리티를 적용했기 때문에 이런 과정도 스프링 시큐리티를 이용하여서 진행해야 했다. 1. MAVEN 의존성 설정 기존에 타임리프를 사용하기 위한 의존성 이외에 추가적으로 아래와 같은 의존성을 설정해야 한다. org.thymeleaf.extras thymeleaf-extras-springsecurity5 3.0.4.RELEASE 2. SpringSecurityD..
이왕이면 다홍치마 백엔드 개발자들을 꿈꾸는 학생(?)들이 모여서 하는 프로젝트라고 하지만 프론트(뷰)단이 너무 못생기면 어디 내놓기가 많이 민망하다. 이런 문제를 쉽게 해결해 주는 것이 부트스트랩인데, 쉽게 생각하면 디자인을 무난하게 일정 수준의 품질로 나오게 할 수 있는 css의 모임? 이라고 볼 수 있다. 사실 이전 미니 게시판 프로젝트는 부트스트랩보다 좀 더 세련 되 보이는 semantic-ui를 사용 했었는데, 바로 적용 할 수 있는 테마가 적어서 부트스트랩으로 선회했다. 테마 고르기 테마를 고르는 기준은 심플하고 깔끔한 디자인 이였다. 아무리 좋은 테마라도 결국 다른 목적의 웹사이트로 바뀌기 위해서는 커스터마이징은 필수로 진행된다. 화려한 테마일 수록 커스터마이징이 힘들 것으로 예상될 것 같아 ..