728x90

전체 글 331

Java 엑셀 파일(Excel) 다운로드

개발을 진행하다 보면 고객의 요청으로 특정 데이터를 추출하여 엑셀 파일을 생성하여 다운로드 받는 기능을 만드는 일이 종종있습니다. 엑셀 파일 생성 후 다운로드의 경우 크게 어렵지 않으며 자바에서 셋팅을 어떻게 해주냐에 따라 폰트, 글자 크기, 글자 배치 등을 설정할 수 있습니다. 오늘은 간단한 방법으로 자바 엑셀파일 다운로드에 대해서 알아보겠습니다. 1. GET 방식의 API 생성 @GetMapping("/get/excel/users") public void excel(HttpServletRequest req, HttpServletResponse res) { try { // 엑셀 다운로드 함수 TestUtil.excelDownload(res); }catch(Exception e) { e.printStac..

JAVA 2022.09.05

HTTP의 Header, Body의 구조

HTTP 구조 HTTP 헤더와 본문으로 구성되어 있다. HTTP 본문에는 실제로 통신과정에서 주고 받을 컨텐츠가 담겨져 있다. HTTP헤더는 HTTP메시지(요청/응답)와 본문에 대한 정보를 말해주고 있다. 이에 대해서 이해하는 것이 실제로 중요하다. 해당 메시지가 제공하는 기능에 대한 최소한의 정보가 정리된 요약본이라고 할 수 있기 때문이다. 헤더에 그 프로토콜에 불필요한 내용을 담으면 네트워크로 전송되는 데이터의 크기가 커져서 빠른 전송이 불가능하기 때문에 프로토콜을 설계할 때부터 꼭 필요한 내용만 담아야 하고, 모든 기능이 표현되어야 한다. 이에 대해 HTTP 헤더는 크게 세가지로 구성되어 있다. 1) General Header 전송되는 컨텐츠에 대한 정보보다는, 요청/응답이 이루어지는 날짜 및 시간..

HTTP 2022.09.03

JAVA stream filter 정리

Filter 스트림내 요소에 대해서 필터링하는 작업 준비하기 java stream을 사용하는데 아직 미숙한것 같아서 여러가지 예제를 사용해보며 연습해보자. sample data (Human) 번호 이름 가진돈 생일 1 jojae 2900 1991-02-26 2 haha 1000 2003-03-02 3 arabia 30000 2001-04-06 4 cici 150 1982-05-16 5 zzang 40000 1910-06-26 6 ssu 200000 2012-07-11 7 kuku 150 1991-02-27 public class Human { private Long idx; private String name; private Integer money; private LocalDate birth; } 기본..

JAVA 2022.09.01

Java8 Optional 의 ifPresent 활용

자바 8에 추가된 Optional이 제공하는 ifPresent를 사용해서 null을 확인하는 if 문을 줄일 수 있다. Member member = memberRepository.findById(id); if (member != null) { if (member.isAdmin()) { member.addAdminPermissions(); } else { member.addDefaultPermissions(); } } 이런 코드가 있다고 가정해보자. memberRepository가 제공하는 findById를 Member 타입을 리턴하는데 이 값을 null일 수도 있기 때문에 if (member != null)과 같은 코드가 존재한다. 이 코드에 이제 Optional을 적용한 다음코드를 살펴보자. Membe..

JPA 2022.09.01

(MySql) workbench에서 쿼리 출력 후, 한글 안깨지고 엑셀(xlsx) 파일로 추출

1. mySql workbench를 실행한다. 2. 원하는 쿼리를 쿼리 칸에 붙여넣는다. 3. 그리고 좌측 상단에 번개모양 버튼을 눌러 쿼리를 실행한다. 4. 쿼리 결과가 나오면 Export 버튼을 클릭해서 csv 파일로 저장한다. 5. 저장한 파일을 우측 클릭해서 [연결 프로그램] → [메모장]으로 켜준다. 6. [파일]->[다른이름으로 저장]을 클릭한다. 이 창에서 [파일 형식]을 txt에서 모든 파일로 변경해주고 [파일 이름] 뒤에 .csv를 붙여준다. 그리고 인코딩이 UTF-8로 되어있는데 ANSI로 변경해준다.(안그러면 한글이 깨짐) 7. excel이 되는 컴퓨터에서 파일을 연다. 8. [파일]->[다른 이름으로 저장]을 누르고, [파일 형식]을 CSV에서 Excel 통합 문서로 변경해준다. 9..

CS지식 2022.09.01

(Rest API 개발)PUT과 PATCH의 차이점

HTTP Method 중에 PUT와 PATCH는 리소스의 업데이트를 의미한다. 리소스를 업데이트 한다는 점에서는 같은 역할을 하는 메소드처럼 보이지만 두개의 요청에는 약간의 차이가 있다. PUT : 리소스의 모든 것을 업데이트 한다. PATCH : 리소스의 일부를 업데이트 한다. 아래와 같은 회원이라는 리소스가 있다. 회원 (member) 1 이름 (name) 애용이 나이 (age) 10 성별 (gender) M 아래와 같은 요청을 보내면 PUT /members/1 { name : "홍길동", age : 19, gender : "M" } 회원 (member) 1 이름 (name) 홍길동 나이 (age) 19 성별 (gender) M 위와 같이 변한다. 이번에는 나이와 성별를 빼고 요청을 보내면 PUT /..

Rest API 2022.08.31

(스프링부트 Rest API) 다건 삭제 관련

Bulk delete 일반적으로 HTTP 메소드를 사용할 때 데이터 위치는 아래와 같습니다. GET, DELETE => header에 데이터 포함 POST, PUT => body에 데이터 포함 방법 1 첫 번째 방법은 구분자를 사용해서 path로 데이터를 넘기는 방법입니다. DELETE /resources/1;2;3;4 DELETE /resources/1+2+3+4 DELETE /resources/1,2,3,4 방법 2 두 번째 방법은 QueryString을 사용하는 방법입니다. DELETE /resources?id=1&id=2&id=3&id=4 방법 3 세 번째 방법은 POST나 PUT을 사용하는 방법입니다. 첫 번째, 두 번째 방법의 문제점은 길이의 제약이 있다는 점입니다. 브라우저마다 URL의 Ma..

Rest API 2022.08.30

@Transactional(rollbackFor = Exception.class) 에 대해

1. 서론 초반 @Transactional 어노테이션에 대해 자세히 알아보지 않고, 막연히 롤백때 사용한다고 하여 SQL C,U,D 를 할 때마다 메소드 위에 붙여서 사용하곤 하였다. 하지만, 내 코드를 보신 선임께서 단지 @Transactional 만 붙이면 롤백이 안되고, @Transactional(rollbackFor = Exception.class) 을 붙여야 된다고 알려주셨다. 여기에서 뭐 때문인지에 대해 호기심에 트랜잭션에 대해 찾아보다가 내가 생각했던 것 보다 더 많은 기능들이 존재한다는 것을 알고 정리해보려 한다. 2. 트랜잭션이 뭐지? 데이터베이스의 상태를 변경하는 작업 또는 한번에 수행되어야 하는 연산들을 의미한다. begin, commit 을 자동으로 수행해준다. 예외 발생 시 rol..

JPA 2022.08.26

물리삭제(hard delete)와 논리삭제(soft delete)

데이터베이스에서 데이터를 삭제하는 방법에는 물리삭제와 논리삭제가 있으며 그중 하나를 선택하여 사용합니다. 물리삭제는 SQL의 DELETE 명령어를 사용하여 직접 데이터를 삭제하는 방법입니다. 삭제 대상인 데이터가 필요없을때 (추후에 조회할 필요가 없을때) 사용합니다. 논리삭제는 SQL의 UPDATE 명령어를 사용하여 삭제 여부를 알수 있는 컬럼에 데이터가 삭제되었다는 값을 넣어서 표현합니다. 삭제를 해도 삭제하기전의 데이터를 보관해야 할 경우에 논리삭제를 사용합니다. 물리삭제와 논리삭제의 예시 배송지 정보가 다음과 같이 3개가 있다고 하면 id 회원 id 수령인 이름 수령인 연락처 기본 배송지 여부 우편번호 주소 상세주소 삭제여부 1 1 김태하 010-1234-5678 1 01234 서울특별시 동작구 어..

CS지식 2022.08.25

(Spring Data JPA)리스트에서 첫번째 값만 가져오기

최근 개발하면서 가장 상위에 있는 한개의 로우의 id 값을 id순으로 역순으로 정렬한뒤 가져오는 쿼리를 짜서 작업을 하려고 다음과 같이 쿼리문을 작성해서 JPQL을 사용하려고 했는데, 오류가 발생했다. -- mariaDB 기준 select id from table order by id desc limit 1; 찾아보니 JPQL은 limit 명령어를 지원하지 않는다고 해서, 구글을 좀 뒤져보니 쉽게 해결방법을 찾을 수 있었다. Spring JPA에서도 결과를 제한하는 기능을 제공하고 있었고, 나의 경우는 다음 문서를 참고했다. (Spring JPA Doc) Spring Data JPA - Reference Documentation Example 108. Using @Transactional at query..

JPA 2022.08.24
728x90