Programming 14

[스프링/Spring] @SpringBootApplication 어노테이션을 완벽하게 파헤쳐보자

0. 목차 1. 서론 2. 본론 @SpringBootConfiguration @ComponentScan @EnableAutoConfiguration 3. 정리 서론 스프링부트 프로젝트를 생성을 하게되면, 기본 application클래스가 생성이된다. 해당 클래스를 잘 살펴보면 @SpringBootApllication 어노테이션이 달려있음을 확인 할 수 있다! 아무생각 없이 당연히 달려있으니까 쓰던 어노테이션이지만, “SpringBootApplication 어노테이션을 사용하면 마법과 같은 일들이 발생한다”고 표현을 할만큼 중요한 역할을 수행한다. 본 게시글에서는 @SpringBootApplication 어노테이션에 대해 파고들어 보겠다 본론 우선 파고들어가보면, 스프링부트어플리케이션 어노테이션의 내부는 ..

Programming/Spring 2023.01.09

[Spring/Java/Jackson] JSON List를 문자열(String)으로 변환

문제의 발단 API 개발 중 다음과 같은 JSON을 받아와 파싱하여, 그중 JSON List 인 runningData 전체를 문자열(String)으로 저장할 필요가 생겼다. 파싱과 관련된 자세한 내용을 보고싶다면 여기를 클릭하세요! { "userId" : long(아이디번호) , "runningId" :long(아이디번호) , "duration" : int(지속시간), "runningData" : [ { "latitude" : double(경도), "longitude" : double(위도), "altitude" : double(고도), "speed": double(속도), "timestamp" : DateTime(시간) },{ … } ] } 여기서는 Java가 json을 편리하게 다룰수 있도록 도와주는..

Programming/Spring 2022.07.31

[spring/java] JSON 안의 JSON 리스트 객체로 파싱받기

문제의 발단 API 개발 중 JSON 안에 JSON 배열(리스트)를 가진 형식의 JSON을 객체로 파싱하여 저장할 필요가 생겼다. 즉, 다음과 같은 형식의 JSON 테이터를 객체로 받아와야할 필요가 생긴것 { "userId" : long(아이디번호) , "runningId" :long(아이디번호) , "duration" : int(지속시간), "runningData" : [ { "latitude" : double(경도), "longitude" : double(위도), "altitude" : double(고도), "speed": double(속도), "timestamp" : DateTime(시간) },{ … } ] } 결론부터 말하면 본인은 위의 형식에 해당하는 데이터 객체를 만들어 해결했다. 소스 코드 ..

Programming/Spring 2022.07.31

[M1 MAC] openJDK 버전 다운그레이드 시키기 (17에서 11로)

개발환경 셋팅을 위해 팀원들과 openJDK 11 버전을 쓰기로 합의봤다. (8은 너무 구버전이고, 17은 안정성이 떨어지기 때문) 하지만.. 맥북프로 셋팅 초기에 이미 Jdk 최신버전으로 설치해버린 것 아래처럼 openjdk 11을 다운받아 설치했지만 계속 18버전으로 유지되고 있었다. 이에 아래와 같은 방법으로 다른 버전을 설정시켜보게 되었다. 1.터미널을 열고 다음과 같은 명령어를 입력한다. > /usr/libexec/java_home -V 이미 18과 11 버전이 깔려있는 본인의 경우 다음과 같은 문구가 떴다 Matching Java Virtual Machines (2): 18.0.1.1 (arm64) "Oracle Corporation" - "OpenJDK 18.0.1.1" /Users/'사용자..

[Mac/Intellij] Spring + mariaDB 연동 프로젝트 만들기 & 환경셋팅

본 글은 마리아 디비가 설치되어 있다는 가정하에 시작합니다. brew가 설치되어있는 사용자는 아래의 명령어를 입력하고, 아닌 사람은 검색을 통해 설치해주세요 brew install mariadb 1. Spring 프로젝트 생성 본 게시글에서는 intellij의 spring initializr 플러그인을 활용할 것이다. 만약 없다면 아래의 사이트를 대신 이용하자. https://start.spring.io/ group, projct Name을 설정해주고, opnJDK 11를 선택후 Next를 눌러준다. 이후 Spring Boot DevTools, Lombok, Spring Web, Spring Data JPA, MariaDB Driver 이렇게 5가지의 dependency들을 추가해후 create를 눌러준..

Programming/Spring 2022.07.06

[Spring/스프링] 롤링페이퍼(게시판) 프로젝트 2. Repository 생성

[Spring/스프링] 롤링페이퍼(게시판) 프로젝트 1. Entity 생성] [Spring/스프링] 롤링페이퍼(게시판) 프로젝트 1. Entity 생성 https://coding-zzang.tistory.com/18 [Spring/스프링] 롤링페이퍼 프로젝트 0. 프로젝트 설명 "온라인 롤링페이퍼 사이트를 만들어볼까...?" Spring공부를 시작할때 쯔음 , 작은 프로젝트를 만들어보면 좋을 것. coding-zzang.tistory.com 전편입니다. “JPA 와 EntityManager” 본 프로젝트에서는 대표적인 ORM방식의 프레임워크인 JPA를 사용할 것이다. 우선 JPA에서 제공하는 Entity Manager에 대해 설명해보겠다 EntityManager는 entity객체들을 영속성 컨텍스트 (P..

Programming/Spring 2022.03.23

[Spring/스프링] 롤링페이퍼(게시판) 프로젝트 1. Entity 생성

https://coding-zzang.tistory.com/18 [Spring/스프링] 롤링페이퍼 프로젝트 0. 프로젝트 설명 "온라인 롤링페이퍼 사이트를 만들어볼까...?" Spring공부를 시작할때 쯔음 , 작은 프로젝트를 만들어보면 좋을 것 같아 시작한 프로젝트이다. 사실 일반 게시판과 거의 비슷하지만, 그냥 게시판보 coding-zzang.tistory.com 전편 입니다 "Entity를 정의하고 코딩해보자!" entity를 만들기 이전! 우선 관계부터 설정해보겠다. 크게 회원을 의미하는 member, 각각의 롤링페이퍼를 의미하는 paper, 그리고 댓글을 의미하는 comment 이렇게 3가지의 entity로 이루어져있다. 이때 한 회원은 1개이상의 페이퍼를 만들어 공유할수 있다 (ex. 숭실 산..

Programming/Spring 2022.03.22

[Spring/스프링] 롤링페이퍼(게시판) 프로젝트 0. 프로젝트 설명

"온라인 롤링페이퍼 사이트를 만들어볼까...?" Spring공부를 시작할때 쯔음 , 작은 프로젝트를 만들어보면 좋을 것 같아 시작한 프로젝트이다. 사실 일반 게시판과 거의 비슷하지만, 그냥 게시판보다는 조금 더 단순하다. 우선 초반에는 아~~주 간단한 기능만담아 구현해보려고 한다. 회원가입을 하여 회원이 될수 있다 회원은 나만의 롤링페이퍼를 여러개 만들 수 있다 페이퍼 리스트에서 원하는 페이퍼를 찾아 코멘트(댓글)을 남길 수 있다. 구현상의 편의를 위해 복잡한 로그인 기능은 빼둘것이다 H2 Database와 Thymeleaf 사용예정이다. "프로젝트 환경을 설정해보자!" 스프링부트 스타터를 사용하여 손쉽게 개발 전 환경설정을 해주었다. ※Spring Web / Thymeleaf / Lombok / JPA..

Programming/Spring 2022.03.22

[Spring/스프링] AOP(Aspect Oriented Programming) 이해하기

AOP가 뭔가요? AOP를 설명하기 전, 한가지 상황을 예시로 들어보자. /** * 회원가입 메소드 */ public Long join(Member member){ validateDuplicateMember(member); memberRepository.save(member); return member.getId(); } 위와 같은 회원가입, 회원 조회 등, 1000개의 메소드로 이루어진 회원 관리 프로그램이 있다. 모종의 이유로 회원관리 프로그램에서 모든 메소드의 호출시간과 종료시간을 측정해야 한다고 가정해보자 /** * 회원가입 메소드 */ public Long join(Member member){ long start = System.currentTimeMillis(); try{ validateDup..

Programming/Spring 2022.03.06

[Spring/스프링] Persistence Layer를 위한 JDBC, JPA

지금까지 공부했던 내용은 '메모리에 데이터를 임시 저장'하여 테스트에 사용 하는 비영속적인 방식이었다. 이에 이번 게시글에서는 관계형 데이터베이스 등을 활용하여, 데이터를 영구적으로 DB에 저장하여 영속성을 부여하는 몇가지 방법에 대해 설명할 것이다. JDBC 란 무엇인가요? JDBC의 사전적 정의는 ‘자바에서 DB에 접속할수 있도록 하는 자바 API’로 , 데이터베이스에서 자료를 쿼리하거나 업데이트 하는 방법을 제공한다 이와 관련 한 이야기에 앞서, 프로그램의 아키텍처에서 영속성을 부여해주는 Persistence Layer라는 계층이 존재한다 Persistence Layer 계층을 구현하는데 사용되는 것이 바로 JDBC이다! 하지만 최근의 모든 Java Data Access 기술의 내부적으로 JDBC ..

Programming/Spring 2022.03.06