[Spring] Google Cloud Vision API로 이미지에서 텍스트 추출하는 기능 만들기
·
Spring
포켓몬슬립 식재료 가방을 캡쳐해서 올리면 식재료 수량이 저장되면 좋겠다...하면 되겠다! 1. Vision API 1.0. Google Cloud Vision API 란?Google에서 제공하는 머신러닝 기반 이미지 분석 AI이미지 인식, 객체 검출 등에서 매우 효과적으로 사용할 수 있는 API 제공아래 사이트에서 다음과 같이 샘플로 분석해볼 수 있다https://cloud.google.com/vision?hl=ko 1.1. Vision AI 환경 준비https://chung-develop.tistory.com/47 Google Vision AI(이미지분석 API) 적용-이미지 내 텍스트 추출하기(OCR)-1편Google Vision AI(이미지분석) 적용하기-이미지 내 텍스트 추출하기(OCR)..
[Spring] @Controller와 @RestController, 공통 응답 포맷
·
Spring
[Next.js] Thymeleaf 기반 구조 Next.js로 리팩토링 : Next.js 준비 및 설정 / Docker 컨테이너화 / Nginx 프록시 설정이전 Thymeleaf로 간단한 페이지를 제공하던 프로젝트에서 Next.js 프론트를 추가하면서백엔드 컨트롤러를 @Controller에서 @RestController로 변경했습니당그러면서 JSON 응답의 일관성을 위해 공통 응답 포맷 적용ㄱ 1. @Controller전통적은 Spring MVC의 컨트롤러 어노테이션주로 View(화면)을 반환하기 위해 사용@ResponseBody 어노테이션을 활용하여 JSON 형태 데이터 반환 가능@Controller@RequestMapping("/ingredients")public class Ingredie..
[Spring] 영속성 컨텍스트(Persistence Context) : 정의 / 사용 / FetchType
·
Spring
1. 영속성 컨텍스트 (Persistence Context) 1.1. 영속성 컨텍스트란?JPA가 데이터베이스와 직접 연결하지 않고 엔티티 객체를 관리하는 메모리 공간엔티티를 관리하는 1차 캐시(저장소)매번 DB-JPA 직접 통신하지 않고, 엔티티를 보관하면서 변경 사항 추적 1.2. 엔티티의 생명주기 1.2.1. 비영속 (new/transient)영속성 컨텍스트와 전혀 관계가 없는 상태Member member = new Member();member.setId("member1");member.setUsername("홍길동"); 1.2.2. 영속 (managed)영속성 컨텍스트에 저장된 상태EntityManager em = EntityManagerFactory.createEntityManager();em..
[Spring] Spring AOP로 Log 기록하기 : @Around / @Before / @After
·
Spring
1. Spring AOPAOP (Aspect-Oriented Programming) : 관점 지향 프로그래밍을 지원하는 기술로깅, 보안, 트랜잭션 관리 등과 같은 공통 관심사를 모듈화코드 중복을 줄이고 유지 보수성 향상핵심 로직과 부가 기능 분리 1.1. 주요 용어용어설명Aspect공통적인 기능들을 모듈화한 것을 의미TargetAspect가 적용될 대상 (메소드, 클래스 등이 해당)Join pointAspect가 적용될 수 있는 시점 (메소드 실행 전, 후 등)AdviceAspect의 기능을 정의한 것Point cutAdvice를 적용할 메소드의 범위를 지정 1.2. 주요 어노테이션어노테이션설명@Aspect해당 클래스를 Aspect로 사용하겠다는 명시@Before대상 메소드가 실행되기 전에 Advic..
[Spring] 로깅 방식과 레이어별 로깅 전략
·
Spring
1. 상황별 로그 레벨INFO 레벨 : 실제 운영 환경에서 주로 사용정상 동작과 주의해야 할 사항 기록 → 운영 상태 모니터링 및 조치DEBUG 이하 레벨 : 주로 개발 과정에서 사용 (시스템 내부 동작 이해, 디버깅) 2. 로그 기록 방식AOP / Interceptor / Filter: 반복되는 입출력 흐름 (API 요청/응답, 서비스 공통 처리)직접 log.info() 작성: 도메인 이벤트, 비즈니스 핵심 로직프레임워크 설정: SQL 로그, 성능 지표 등 (Hibernate, MyBatis log 설정을 통한 SQL 로그) 3. 애플리케이션 레이어별 로깅 3.1. ControllerAOP / Interceptor로 공통 처리 (ex. Spring AOP)상황API 요청 / 응답주요 입력 파..
[Spring] 로깅(Logging) / 로그레벨 / 스프링에서 로깅
·
Spring
1. 로깅(Logging)이란?정보를 제공하는 일련의 기록인 로그(Log)를 생성하도록 시스템을 작성하는 활동버그에 대한 유용한 정보 제공성능에 관한 통계와 정보 제공로그를 출력하는 방법System.out.println()로깅(Logging) 라이브러리 1.1. [로그 출력 방법] System.out.printlnprint() 메서드를 사용 가능왜 상용서버에서 사용하지 않을까?성능 저하 : synchronized로 동기화 되어 있어 쓰레드 Lock 걸림날짜/시간/타입 등 정보가 없음데이터를 쌓기 어려움 : 콘솔창에 출력만 1.2. [로그 출력 방법] 로깅 라이브러리최소한의 정보(날짜, 시간, 타입 등) 제공데이터를 서버에 저장하고 파일화 가능대표적인 로깅 라이브러리java.util.logging : JD..
[Spring] Thymeleaf(타임리프)란?
·
Spring
1. Thymeleaf 란?HTML 파일에서 동적으로 데이터를 넣어주는 템플릿 엔진HTML과 Java를 연결해주는 역할Java 기반 템플릿 엔진 → 주로 Java(Spring Boot)에서 사용된다Spring MVC 패턴에서 V(View)에 해당하는 화면을 구현할 때 사용아래 사진처럼 return “viewname”의 View를 구현 2. Spring에서 Thymeleaf 사용하기 2.1. 의존성 추가build.gradle : 의존성 추가dependencies { implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' ...}[자동] application.properties의존성을 추가하면 아래 코드가 자동으로 추가..
[Spring] 테스트 / JUnit / Mockito / 스프링의 계층별 단위테스트(Controller, Service, Repository)
·
Spring
이번에 컨트롤러 테스트 코드를 작성해보면서 정리한 것들! 1. 테스트테스트 : 프로그램을 실행했을 때 요구사항에 맞춰 동작하는지 검증하는 행위범위에 따른 분류단위 테스트 (Unit Test)통합 테스트 (Integration Test)E2E 테스트 (End-to-End Test) 1.1. 단위 테스트하나의 클래스와 메서드 단위로 비즈니스 로직 검증외부 의존성 없이, 하나의 기능/메서드가 정상 동작하는지 확인TDD에서의 테스트케이스는 주로 단위 테스트 작성을 의미자동화되어 사용 (CI; Continuous Integration)Java에서는 주로 JUnit5를 사용하여 작성모듈이 의존성을 가지는 경우, 의존 모듈을 Mock이라는 가짜 객체로 만들어 행동 및 결과값이 나오도록 정의한 후 테스트 가능@Te..
[Spring] 스프링의 기본적인 예외처리 / 예외처리 방법
·
Spring
1. Spring의 기본적인 예외 처리 방식Spring은 기본적으로 에러 처리를 위한 BasicErrorController가 구현되어 있다별도의 설정 없다면, /error로 에러 요청 다시 전달하도록 WAS 설정되어 있다.BasicErrorController로 에러 처리 요청을 전달WAS(tomcat) -> 필터 -> 서블릿(디스패처 서블릿) -> 인터셉터 -> 컨트롤러-> 컨트롤러(예외발생)-> 인터셉터 -> 서블릿(디스패처 서블릿) -> 필터 -> WAS(tomcat)-> WAS(tomcat) -> 필터 -> 서블릿(디스패처 서블릿) -> 인터셉터 -> 컨트롤러(BaicErrorController) 1.1. BasicErrorController@RequestMapping("${server.error...
[Spring] 스프링의 디렉토리 구조 : 계층형 / 도메인형
·
Spring
1. 스프링 디렉토리 구조스프링 디렉토리 구조를 설계하는 방식은 크게 계층형 / 도메인형 2가지가 있다 1.1. 계층형src/main/java/com/example/project/├── controller├── service├── repository├── dto├── entityMVC를 기반으로 각 계층을 대표하는 directory구조가 직관적이라 이해가 쉬움모든 도메인이 같은 디렉토리에 섞여 있음하나의 디렉토리에 많은 class 파일이 모여 모듈 단위 분리가 어려움 1.2. 도메인형src/main/java/com/example/project/├── DemoApplication.java├── domain│ │ ├── coupon│ │ │ ├── controller│ │ │ ├..