본문 바로가기

(9)
[Go] Go와 http를 이용한 REST API 만들기 - 학식 취향분석 (2) haksik-personalized 저번 스프링 부트를 이용하여, 사용자 취향에 맞는 학식 메뉴를 추천해주는 간단한 프로그램을 구성해보았다. (참고 링크: https://winterlimited.tistory.com/15) 현재는 취향 분석의 여러개의 값이 존재하지 않아 평가된 메뉴 점수의 평균값만으로 취향을 분석하여 추천한다. 학식 메뉴를 제공하고, 사용자가 각 메뉴를 "좋아요", "보통이에요", "싫어요"로 평가할 수 있게끔 기존 프로그램과 동일한 방식으로 동작할 수 있도록 구성해두었다. 다만, 따로 DB를 두고있지 않고, - store의 user.go, menu.go에 배열을 이용해 값을 저장할 수 있도록 임시로 구성해두었고 추후 ScyllaDB와의 연동을 계획하고 있기때문에, NoSQL 형식으로 ..
[Spring] Spring과 JPA를 사용해보기 - 학식 취향분석 프로그램 (1) haksik-personalized 스프링 부트를 이용하여, 사용자 취향에 맞는 학식 메뉴를 추천해주는 간단한 프로그램을 구성해보았다. 이 프로젝트는 이전에 React와 코사인 유사도 알고리즘을 사용하여 만들었던 음식점 추천 시스템을 스프링 부트와 비슷하게 재구성하였다. 현재는 취향 분석의 여러개의 값이 존재하지 않아 평가된 메뉴 점수의 평균값만으로 취향을 분석하여 추천한다. 학식 메뉴를 제공하고, 사용자가 각 메뉴를 "좋아요", "보통이에요", "싫어요"로 평가할 수 있다. 사용자가 평가를 진행하면 각 메뉴에 대한 점수가 데이터베이스에 저장되고, 이후에 사용자에게 새로운 메뉴를 추천할 때 이 점수를 활용하게 되어있다. (repository: https://github.com/WinterLimited/h..
[TypeScript] TypeScript 처음 사용해보기 (2) (React.js) Foodie-finder 취향분석을 통한 음식점 추천 - React와 코사인 유사도 알고리즘을 활용한 애플리케이션 TypeScript를 통해 localStorage에서 간단한 작업을 해봤는데, 그것을 포스팅하기에는 너무 간략하다고 생각되어 최근에 심심풀이로 떠올랐던 아이디어를 구현하여 만든 것을 이어 포스팅하게 되었다. 그리고, 그것은 바로 개인 맞춤형 음식점 추천 시스템이다. (repository: https://github.com/WinterLimited/foodie-finder) GitHub - WinterLimited/foodie-finder Contribute to WinterLimited/foodie-finder development by creating an account on GitHub...
[메모] Spring 원리 (3) 빈 생명주기 콜백, 빈 스코프 - 빈 생명주기 콜백 - 스프링 빈의 이벤트 라이프 사이클 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸전 콜백 -> 스프링 종료 초기화 콜백: 빈이 생성되고, 의존관계의 주입이 완료된 이후 호출 소멸전 콜백: 빈이 소멸되기 직전에 호출 - 초기화, 소멸 인터페이스 - InitializingBean - afterPropertiesSet() DisposableBean - destory() 인터페이스 방식의 단점 스프링 전용 인터페이스라 스프링에만 의존하여 사용가능 초기화, 소멸 메서드의 이름 변경 불가능 코드를 고칠 수 없는 외부 라이브러리에서는 사용 불가능 - 빈 초기화, 소멸 - 메서드 이름을 자유롭게 부여가능 스프링 빈이 스프링 코드에 의존하지 ..
[메모] Spring 원리 (2) 컴포넌트 스캔, 의존관계 자동주입 - 스프링 Annotation - 스프링에서는 컴포넌트 스캔을 통해 자동적으로 의존관계를 주입하도록 할 수 있다. @Controller: 스프링 MVC 컨트롤러로 인식한다. @Repository: 스프링 데이터 접근 계층으로 인식하고, 데이터 계층의 예외를 스프링 예외로 변환해준다. @Configuration: 앞서 보았듯이 스프링 설정 정보로 인식하고, 스프링 빈이 싱글톤을 유지하도록 추가 처리를 한다. @Service: 특별한 처리를 하지 X, 개발자들이 핵심 비즈니스 걔층을 인식하는데 도움을 준다. - ComponentScan FilterType - FilterType은 5가지 옵션이 있다. ANNOTATION: 기본값, annotation을 인식해서 동작 ASSIGNABLE_TYPE: 지정한 타입..
[메모] Spring 원리 (1) 싱글톤 - 싱글톤 패턴 - 순수한 DI 컨테이너인 AppConfig를 통해 요청을 하면, 매 트래픽마다 객체를 생성 -> 기존 방식은 메모리 낭비가 심해질 수 있다. 해결방안: 해당 객체가 딱 1개만 생성되고, 공유하도록 설계 -> 싱글톤 패턴 싱글톤 패턴 구성 package springprinciple.core.singleton; public class SingletonServiceTest { // 1. static 영역에 객체 instance를 미리 하나 생성 private static final SingletonServiceTest instance = new SingletonServiceTest(); // 2. 이 객체 인스턴스가 필요하면 오직 getInstance() 메서드를 통해서만 조회가능 publi..
[메모] Spring 입문(2) - 스프링 DB - @SpringBootTest DB연동 config를 Spring이 들고 있기 때문에 테스팅 진행에 있어 스프링 컨테이너와 테스트를 함께 실행할 수 있게 해줌 DB연동 이후 Testing 진행 시 @Transaction 적용하면 DB에 실제 데이터 반영 없이(다음 테스트에 영향 없이) 테스팅 진행 가능 (@AfterEach, BeforeEach 사용 불필요) JPA 스프링 Repository 관련 예제 코드 package winterlimited.hellospring.repository; import jakarta.persistence.EntityManager; import jakarta.persistence.TypedQuery; import winterlimited.hellosprin..
[메모] Spring 입문(1) Gradle은 의존관계가 있는 라이브러리를 함께 다운로드 한다. - 스프링 부트 라이브러리 - spring-boot-starter-web spring-boot-starter-tomcat: 톰캣(웹 서버) spring-webmvc: 스프링 웹MVC spring-boot-stater-thymeleaf: 타임리프 템플릿 엔징(View) spring-boot-stater(공통): 스프링 부트 + 스프링 코어 + 로깅 spring-boot spring-core spring-boot-stater-loggin logback + slf4j - 테스트 라이브러리 - spring-boot-starter-test junit: 테스트 프레임워크 mockito: 목 라이브러리 assertj: 테스트 코드 작성의 편리함 제공 s..
[TypeScript] html에서 TypeScript 처음 사용해보기 (1) (TypeScript란?) 저번 Google의 Maps API를 사용해보는 과정에서 기본적으로 API를 TypeScript으로 제공해주는 것을 알았다. JavaScript랑 굉장히 비슷한 이름이어서 확인해보니.. 뭔가 조금 다른 것 같기도 하고..... 어쨌든 저번에 간단하게 사용해봤던 구글 지도는 기존에 사용하던 JavaScript를 이용해 만들게 되었는데, 뭔가 문득 궁금했다. '아니 TypeScript가 무슨 언어길래. 사용자가 얼마나 많기에 Google의 Maps API를 제공해주는 예제 코드를 보여주는데 가장 먼저 보여주는 거지?' 그래서 우연히 개발자 친구랑 얘기를 하다 TypeScript에 대해 묻게 되었고, 나름 친절(?)하게 답변받았다. TypeScript는 기존 JavaScript에서 정적 타입이 지원된 언어로 ..