분류 전체보기 (80) 썸네일형 리스트형 [Spring] 파일 및 이미지 업로드 시작하기에 앞서 이번에는 Spring Boot, Spring MVC, Spring Data JPA, Thymeleaf를 활용하여 파일 및 이미지 업로드를 구현해보았다. 파일 및 이미지 업로드를 구현하는데 있어서 다음과 같은 요구사항을 설정하였다. 복수개의 이미지를 업로드 할 수 있으며 이미지는 다운로드 형식이 아니라 직접 출력한다. 복수개의 파일을 업로드 할 수 있으며 파일은 다운로드 형식으로 진행한다. 기존에 만들었던 게시판 프로젝트에 이어 구현하였으며 프로젝트의 클래스 다이어그램은 다음과 같다. 학생 클래스 - 한 학생은 여러 개의 게시물을 작성할 수 있다. 게시물 클래스 - 게시물은 여러 개의 첨부파일과 댓글을 가질 수 있다. 댓글 클래스 - 댓글은 여러 개의 답글을 가질 수 있다. 첨부파일 클래스.. [JPA] N+1 문제 다들 Spring과 JPA 조합으로 구현을 할 때, N+1문제를 한번씩 들어봤을 것이다. 이번 포스트는 JPA에서의 단골손님인 N+1문제에 대해 알아보려고 한다. N+1이란 우리는 조회, 수정 등의 이유로 다양한 엔티티들을 조회하곤 한다. 각각의 엔티티들은 연관관계를 가질 수도, 가지지 않을 수도 있다. N+1문제는 연관관계를 가지는 엔티티들 중에서 연관 관계에서 발생하는 이슈이다. A라는 엔티티(N)가 B라는 엔티티(1)와 연관관계를 가지고 있다고 하자. 우리가 A라는 엔티티를 조회할 때, B라는 엔티티에 대한 데이터를 조회하기 위해 B라는 데이터의 개수(N)만큼 조회 쿼리가 추가로 발생하는 것을 의미한다. 이 부분이 실제로 발생하는 부분에 대해서 실제 예제를 통해 살펴보자. 엔티티 우리는 게시판을.. REST, REST API 우리는 개발을 할 때, 수도 없이 API라는 개념을 접한다. 그런데 우리는 이제 단순 API가 아니라 REST 혹은 RESTFUL한 API를 지향해야한다고 말한다. (API에 대해 잘 모르겠다면, API 링크(tistory.com)를 참고하자) 대체 왜 REST를 지향하는 것일까? 현대에 안드로이드폰, 아이폰와 같은 모바일 디바이스와 브라우저 등 다양한 클라이언트들이 등장함에 따라 다양한 클라이언트들에 대응하기 위한 전략이 필요했다. 또한, 애플리케이션이 점점 더 복잡해지면서 애플리케이션을 어떻게 효율적으로 분리하고 통합하느냐가 큰 쟁점 중 하나로 대두되었다. 그에 따라, 이에 대한 대안을 마련해줄 수 있는 REST에 관심을 가지게 되었다. 그렇다면 REST, RESTFUL는 무엇일까? REST란 RES.. API API? API는 우리가 프로그래밍을 하다보면 수도 없이 접하는 개념 중 하나이다. 당장, 웹 서비스 개발에서만 봐도 구글 API, 카카오 API 등 다양한 API들이 존재하고 이름에서 알 수 있듯이 다양한 플랫폼에서 API를 제공해준다. 나도 이 개념을 상당히 많이 접해보고 사용했는데 이 포스트에서는 이 API라는 것에 대해서 정리해보려고 한다. 사람들이 API를 쉽게 설명하려고 예시를 들 때 "가게"를 자주 언급한다. 가게의 서비스 과정을 보면 API의 개념을 쉽게 이해할 수 있을 것이다. 우리는 흔히 밥을 먹으러 어떤 가게에 찾아가면 메뉴판에서 메뉴를 고른 뒤 음식을 주문한다. 그렇다면, 우리는 점원에게 (혹은 키오스를 통해) 주문을 하고 주문은 접수되어 요리사에게 전달된다. 요리사는 주문된.. 함수형 프로그래밍 프로그래밍 패러다임 함수형 프로그래밍에 대해서 알아보기 전 프로그래밍 패러다임을 간단히 알아보려고 한다. 프로그래밍 패러다임(Programming Paradigm)에서의 프로그래밍과 패러다임의 의미를 각각 살펴보자. 프로그래밍 : 컴퓨터 프로그램을 작성하는 일 패러다임 : 한 시대의 사람들의 견해나 사고를 근본적으로 규정하고 있는 인식의 체계 이러한 의미로 바라보았을 때, 프로그래밍 패러다임은 프로그래머가 컴퓨터 프로그램을 작성하는 데 있어 바라보는 관점 정도로 해석할 수 있을 것 같다. 즉, 프로그래머에게 프로그래밍의 관점을 갖게 하고 코드를 어떻게 작성할 지 결정하는 역할을 한다. 그렇다면, 현대에 주를 이루던 프로그래밍 패러다임에 대해서 몇 가지 살펴보자. 명령형 프로그래밍 : 어떻게(HOW) .. JAVA Enum Enum JDK 1.5 이전의 자바에서는 열거체(enumeration type)를 사용할 수 없었다. 하지만, JDK 1.5부터는 C언어의 열거체보다 더욱 향상된 성능으로 사용할 수 있어졌다. Enum은 "연관된 상수들의 집합"이라고 표현되기도 하며 서로 관련된 상수를 편리하게 선언할 수 있다. 보통, 대문자 형태로 정의하며 중복되지 않아야 한다. 대체 왜 Enum을 사용할까?를 고민한다면 이유는 다음과 같다. 동등 연산자로 비교할 때 기존의 final static으로 선언한 상수와 달리 타입을 체크하여 비교해주기 때문에 타입 안전하다. 기존의 final static으로 선언한 상수는 변경 후 컴파일해야했지만 Enum의 경우 변경되더라도 재컴파일할 필요가 없다. 자 그러면 어떻게 Enum을 어떻게 사용하.. JAVA Generic 제네릭(Generic)이란 제네릭스(Generics)는 자바 J2SE 5.0 이후에 도입된 개념이다. 제네릭스는 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크를 해주는 기능이다. 클래스에서 사용할 타입을 클래스 외부에서 결정할 수 있다. 컴파일 시 타입 안정성을 제공한다.(의도하지 않은 타입의 객체의 저장을 막고 꺼내올 때의 오류를 방지한다.) 타입 변환을 하지 않아도 된다. 코드 가독성 및 재사용성이 높아진다. Collection에서 자주 사용된다. 제네릭(Generic) 사용방법 클래스 class Generic { public static void main(String[] args) { Box box = new Box(); box.setItem("GilSSang'.. JAVA Collection Collection이란 우리가 흔히 자바를 통해서 프로그래밍을 진행하다보면 다양한 자료구조를 사용한다. 우리는 자료구조를 사용하기 위해 당연스럽게 Collection에 있는 List, Set, Map 등을 꺼내 사용해온다. 이번 포스트에서는 이 Java Collection Framework에 대해서 살펴보려고 한다. Collection은 흔히 배열과 비교될 수 있다. 배열은 우리가 생성할 때 크기를 설정하여 정적으로 생성한다. 그에 따라, 우리가 배열의 크기는 사용하지 않더라도 이미 할당된 상태이고 배열의 크기가 부족할지라도 더이상 저장이 불가능하다. 위에서 말한 것과 비슷한 맥락이지만 우리가 배열 안의 데이터를 삭제하더라도 이미 배열의 메모리는 할당되어 있는 상태이다. 그에 비해, 컬렉션은 사이즈가 정.. 이전 1 ··· 3 4 5 6 7 8 9 10 다음