[Spring] 비동기 처리
·
Spring
비동기 처리를 찾아본 이유 이전 시간에 파이썬 서버를 구성하고 api 통신으로 일부 처리는 파이썬에게 맡기도록 하였다. 잘 처리되고 됐다 생각하던 찰나, 다른 문제가 생겼다. 파이썬으로 request를 보내고 응답이 올때까지 클라이언트도 대기 상태가 된다. 키워드 추출 후 유의어, 반의어 등은 나중에 볼 것이라 요청만 보내면 되는데, 이것마저 기다려야 되는 것이다. 그렇기에 스프링에서 파이썬에게 요청을 보낼 때 비동기 요청을 하고, 아래 코드를 실행시키는 방법을 찾아 적용해보았다. 지금은 팀 회의를 거쳐서 다시 동기적으로 되돌려 놨다. 문제점 발견 팀 회의를 통해 동기적으로 돌리기로 했다. 그래서 비동기 작업임을 알려주는 @Aysnc 어노테이션만 제거하면 되겠다 싶어 주석 처리 후 다시 실행시켜보았는데 ..
[Spring] 파이썬 서버로 api 통신하기
·
Spring/mvc
파이썬 처리가 필요한 이유 현재 졸업프로젝트로 백엔드를 담당하고 있고, 스프링을 사용하기로 결정했다. 우리의 비즈니스 로직 중 STT와 키워드 추출이 필요한데, 이는 파이썬 쪽에서 처리가 필요하다. 처음에는 다음과 같이 처리를 하였다. 1. 파이썬 파일 실행 (ProcessBuilder, Process) 자바에서 ProcessBuilder를 사용하면, 컴퓨터의 python을 실행시킬 수 있다. 코드는 다음과 같다. package site.atkproject.sttservice.util; import lombok.NoArgsConstructor; import java.io.*; @NoArgsConstructor public abstract class PythonFileManager { protected S..
[Spring] Validation
·
Spring
유효성 검사 유효성 검사를 해야하는 이유는 클라이언트가 입력한 값이 서버에서 적절하게 이해하고 처리해줄 수 있는지 사전 검사해주는 역할이라 보면 된다. 스프링 부트에서는 아래의 라이브러리를 추가해주면 어노테이션만으로 아주 쉽게 유효성 검사를 할 수 있다. 커스텀이 필요하면 그때는 만들어주면 될거 같다. implementation 'org.springframework.boot:spring-boot-starter-validation' 유효값 검증을 위해 validation을 사용하는데, 다음과 같은 어노테이션들을 제공한다. 어노테이션 설명 @NotEmpty NULL 체크, 문자열의 경우 길이 0인지 검사 @NotBlank NULL 체크 및 문자열의 경우 길이 0 및 빈 문자열(" ") 검사 @Length(m..
[JPA] Spring Data JPA에서 바로 DTO를 받아보자
·
Spring/jpa, db
게시판에서 좋아요, 싫어요 기능을 구현하려고 하고 있다. Spring Data JPA를 활용해서 나는 인터페이스만 구현해서 아주 편안하게 값을 가져와서 활용하고 있다. 쉬운 쿼리들은 메서드 네임만 잘 조합해도 되는데, 나는 이제 좋아요, 싫어요 개수를 구하고 싶다. 즉, 쿼리에서 count()를 이용해서 갖고 올려고 하는 것이다. 찾아보면 메서드 네임으로도 있을거 같긴 한데.. 일단은 JPQL을 통해서 갖고오는 방법을 정리해 보겠다. 대학 팀플들 땜에 프로젝트 글 정리를 못했는데, 조만간 다 정리해서 올리겠다 ㅠㅠ 좋아요 엔티티 먼저 좋아요 엔티티를 구성했다. @Getter @NoArgsConstructor @Entity public class Likes { @Id @GeneratedValue priva..
[Spring Thymeleaf] Layout 만들기
·
Spring/mvc
footer 영역 입니다. 레이아웃을 만드는 이유 타임리프를 통해 우리는 편안하게 스프링의 모델들을 html에 동적으로 표현할 수 있다. 암튼 내용을 보여주려면 html 파일들이 있어야 할텐데, 보통 header, nav, footer 같은 공통의 영역이 있고, 한 div 태그 안에 다른 내용들을 보여주게끔 설계를 많이 한다. 이럴려면 공통의 레이아웃을 만들어 주어야 하는데, 이때도 타임리프에서 의존성을 추가해서 사용해줄 수 있다. build.gradle에 아래를 추가해주자. implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect' 그리고 나는 다음과 같이 templates 안에 디렉토리와 파일들을 만들어 주었다. footer, header는 ..
[Spring Boot] Devtools를 써보자
·
Spring
로컬 테스트 시 불편한 점 로컬에서 스프링 애플리케이션을 실행할 때 어떻게 하는가? 물론 TDD를 활용하여 테스트를 하는게 제일 베스트지만, 나같은 초보는 아직까지 브라우저에서 화면을 보는 것을 편-안해한다. (안 좋은 습관?이라니 추후 TDD에 익숙해지자) 하지만, 코드를 수정 후 애플리케이션을 다시 실행시키려면 이는 매우 번거롭다. 또 DDL-AUTO를 create 등으로 해두면, 데이터가 많을 시 은근 걸리는 시간도 거슬린다. 이럴 때 쓸 수 있는게 Devtools이다. 대표 기능 대표 기능은 다음과 같다. Automatic Restart: classpath에 있는 파일이 변경될 때마다 애플리케이션을 자동으로 재시작해준다. 개발자가 소스 수정 후 애플리케이션을 재실행하는 과정을 줄여 생산성을 향상시..
[JPA] 어노테이션 정리
·
Spring/jpa, db
엔티티 관련 어노테이션 JPA에선 클래스를 엔티티로 선언해줄 때 어노테이션들을 달아주어 디비와 매핑 시켜주는데, 다음과 같은 어노테이션들이 있다. @Entity: 클래스를 엔티티에 선언, 클래스 위에 선언 @Table: 엔티티와 매핑할 테이블 지정, 클래스 위에 선언 @Id: 테이블 기본키 지정, 필드에 지정 @GeneratedValue: 키 값 생성 시 전량 지정, @Id와 한 세트 @Column: 필드와 컬럼 매핑 시 사용 @Lob: BLOB, CLOB 타입 매핑, 필드에 사용 @CreationTimestamp: insert 시 시간 자동 저장 @UpdatedTimestamp: update 시 시간 자동 저장 @Enumerated: enum 타입 매핑 @Transient: 해당 필드를 데이터베이스 매..
[Spring] Thymeleaf 정리
·
Spring/mvc
사전 지식 타임리프는 서버사이드렌더링 화면을 렌더링하는 방식은 크게 두 가지가 있다. 첫 번째는 브라우저단에서 그리는 CSR(Client Side Rendering)이다. 이것은 리액트나 vue.js 등을 활용하여 동적으로 내용을 갖고와 브라우저에서 직접 화면을 생성할 때 사용한다. 두 번째는 SSR(Server Side Rendering)이다. 서버에서 화면을 그리고 그 html내용을 클라이언트에 보내면 클라이언트(브라우저)는 출력만 하면 된다. 그리고 스프링에서는 대표적으로 이 타임리프를 밀어주고 있고, 백엔드 개발자는 이것을 잘 활용해서 화면을 출력하자. 리액트나, Vue.js도 공부하면 좋겠지만 백엔드만 해도 공부할게 너무 방대하다.. 네츄럴 템플릿 타임리프의 목적은 순수 HTML을 유지하게 해준..
[Spring] 게시판 #4. Controller, Service, Repository 구성
·
Spring/project
스프링 부트를 활용한 게시판 만들기 프로젝트입니다. 목차는 다음 링크에서 확인 가능합니다. [Spring] 게시판 #0. 게시판 사이트 프로젝트 시작 Django로 게시판을 만들었을 때와 달리 스프링 강의는 뭔가 너무 어려운 내용들이 많아 쉽게 뭔가 만들지를 못했다. 하지만 그렇게 지내다 보니 어느덧 4학년 개강을 앞두고 있고, 결과물은 하나 somefood.tistory.com 자세한 코드는 아래 링크에서 확인할 수 있습니다. GitHub - somefood/spring-study Contribute to somefood/spring-study development by creating an account on GitHub. github.com MVC 패턴의 핵심들인, Controller, Servic..
[Spring] 게시판 #3. 엔티티 구성하기
·
Spring/project
스프링 부트를 활용한 게시판 만들기 프로젝트입니다. 목차는 다음 링크에서 확인 가능합니다. [Spring] 게시판 #0. 게시판 사이트 프로젝트 시작 Django로 게시판을 만들었을 때와 달리 스프링 강의는 뭔가 너무 어려운 내용들이 많아 쉽게 뭔가 만들지를 못했다. 하지만 그렇게 지내다 보니 어느덧 4학년 개강을 앞두고 있고, 결과물은 하나 somefood.tistory.com 자세한 코드는 아래 링크에서 확인할 수 있습니다. GitHub - somefood/spring-study Contribute to somefood/spring-study development by creating an account on GitHub. github.com 간단한 화면 구성을 끝냈으니, 이제 엔티티 구성을 해볼 차..
[Spring] 게시판 #2. 화면 구성하기 with 템플릿
·
Spring/project
스프링 부트를 활용한 게시판 만들기 프로젝트입니다. 목차는 다음 링크에서 확인 가능합니다. [Spring] 게시판 #0. 게시판 사이트 프로젝트 시작 Django로 게시판을 만들었을 때와 달리 스프링 강의는 뭔가 너무 어려운 내용들이 많아 쉽게 뭔가 만들지를 못했다. 하지만 그렇게 지내다 보니 어느덧 4학년 개강을 앞두고 있고, 결과물은 하나 somefood.tistory.com 자세한 코드는 아래 링크에서 확인할 수 있습니다. GitHub - somefood/spring-study Contribute to somefood/spring-study development by creating an account on GitHub. github.com 추후 타임리프 정리글도 올리겠다. 게시판의 화면은 대략 다..
[Spring] 게시판 #1. 프로젝트 생성 & 설정
·
Spring/project
스프링 부트를 활용한 게시판 만들기 프로젝트입니다. 목차는 다음 링크에서 확인 가능합니다. [Spring] 게시판 #0. 게시판 사이트 프로젝트 시작 Django로 게시판을 만들었을 때와 달리 스프링 강의는 뭔가 너무 어려운 내용들이 많아 쉽게 뭔가 만들지를 못했다. 하지만 그렇게 지내다 보니 어느덧 4학년 개강을 앞두고 있고, 결과물은 하나 somefood.tistory.com 자세한 코드는 아래 링크에서 확인할 수 있습니다. GitHub - somefood/spring-study Contribute to somefood/spring-study development by creating an account on GitHub. github.com 스프링 부트를 활용해서 프로젝트를 시작할 것이다. 이전에는..