SOLID 5가지 원칙
·
Backend/Java
SRP 단일 책임 원칙(Single responsibility principle) 하나의 클래스는 하나의 책임만 가져야 한다. 하나의 책임은 모호하다. 클 수도 있고, 작을 수도 있으며, 문맥과 상황에 따라 다르다. 중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것 UI 변경, 객체의 생성과 사용을 분리 OCP 개방-폐쇄 원칙(Open/closed principle) 소프트웨어 요소는 확장에는 열려있으나 변경에는 닫혀 있어야 한다. 다형성을 활용해보기 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현 지금까지 배운 역할과 구현의 분리를 생각해보기 문제점 MemberService 클라이언트가 구현 클래스를 직접 선택 MemberRepository..
DTO vs VO
·
Backend/Spring Boot
DTO : 데이터 전달용 = Data Transfer Object = 데이터를 전달하기 위해 사용하는 객체 = 데이터를 담아서 전달하는 바구니 - 오직 getter/setter 메서드만을 갖는다. setter를 사용하지 않고 생성자 메서드를 사용한다면 불변 객체로 만들어 중간에 데이터 위변조를 막을 수 있다. - 다른 로직을 갖지 않는다. - DTO class와 Entity class를 분리하라. VO : 값 표현 = Value Object = 값 그 자체를 표현하는 객체 - VO의 경우 값 그 자체를 나타내는 객체로써, 핵심은 필드 값이 같다면 두 객체를 같은 객체로 본다는 것이다. 이때 당연하게도 주소값을 비교하는 경우의 문제점을 위해서 hashcode()와 equals()를 재정의하여 필드 값이 같..
prepareKotlinBuildScriptModel Task fails in a Java project 오류 해결
·
Backend/Spring Boot
tasks.register("prepareKotlinBuildScriptModel"){ } build.gradle에 추가해주기 ! 해결 완!
spring에 swagger 적용하면서 겪은 3가지 에러 해결하기
·
Backend/Spring Boot
스프링 2.X.X 특정 버전 이후로 Swagger2:2.X.X 버전 실행 에러 발생 해결 -> build.gradle파일의 springfox ~ 버전들을 모두 3.0.0 으로 바꿔준다. // Swagger Lib implementation 'io.springfox:springfox-swagger2:3.0.0' implementation 'io.springfox:springfox-swagger-ui:3.0.0' implementation 'io.springfox:springfox-boot-starter:3.0.0' org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrap..
org.apache.ibatis.binding.BindingException: Parameter 'offset' not found. Available parameters are [arg1, arg0, param1, param2]
·
Backend/Mybatis
페이지네이션 구현 중 mapper 쪽에서 에러가 발생했다. Board Mapper에서 넘겨받은 인자들이 변수들을 찾아가지 못해서 발생한 오류라고 한다. @Param 어노테이션을 통해 넘겨줄 인자를 정확히 명시해 에러를 해결할 수 있었다. 출처 : https://dblee.tistory.com/145
자바 컬렉션 프레임워크 - Java Collections Framework
·
Backend/Java
자료구조의 분류대표적으로 선형 자료구조와 비선형 자료구조 나눌 수 있는데 이러한 분류를 보통 형태에 따른 자료구조라고 보며, 각 자료구조에 알맞게 구체화된 것들을 구현된 자료구조라고 한다. 선형 자료구조(Linear Data Structure): 리스트(List), 큐(Queue), 덱(Deque) 비선형 자료구조(NonLinear Data Structure): 그래프(Graph), 트리(Tree) 집합 자료구조: 집합(Set) Java Collection Framework일정 타입의 데이터이 모여 쉽게 가공할 수 있도록 지원하는 자료구조의 뼈대(기본 구조)라는 의미 자바에서 제공하는 Collection은 크게 3가지 인터페이스로 나뉜다. (List, Queue, Set)앞서 설명한 형태에 따른 자료구조..
제네릭(Generic) - 1
·
Backend/Java
제네릭 - 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것 - 한마디로 특정(specific) 타입을 미리 지정해주는 것이 아닌 필요에 의해 지정할 수 있도록 하는 일반(Generic) 타입이라는 것 - JDK 1.5 이전에서는 여러 타입을 사용하는 대부분의 클래스나 메서드에서 인수나 반환값으로 Object를 사용하였다. 하지만 이 경우에는 반환된 Object 객체를 다시 원하는 타입으로 변환해야 하며, 이때 오류가 발생할 가능성도 존재한다. JDK 1.5부터 도입된 제네릭을 사용하면 컴파일 시 미리 타입이 정해지므로, 타입 검사나 타입 변환과 같은 번거로운 과정을 생략할 수 있게 된다. 제네릭의 제거 시기 - 자바 코드에서 선언되고 사용된 제네릭 타입은 컴파일 시 컴파일러에 의해..
JDK, JRE 그리고 JVM
·
Backend/Java
JDK Java Development kit JDK = JRE + 개발을 위한 도구 컴파일러, 디버그 도구 등이 포함 JRE Java Runtime Environment JRE = JVM + 자바 프로그램 실행에 필요한 라이브러리 파일 등 JVM의 실행환경 구현 JVM : 자바 프로그램을 구동해주는 프로세서(엔진) OS마다 다른 컴파일러가 필요하지만 JAVA는 JVM이 똑같은 바이트 코드를 OS마다 다르게 번역해준다. (⇒ 해당 OS가 이해할 수 있도록 번역해준다) 그렇기 때문에 플랫폼에 독립적인 개발이 가능하다. 동작 과정 자바 실행 파일을 실행하면 JVM은 OS로부터 메모리를 할당한다. .java(자바 소스코드)를 컴파일러가 .class(바이트 코드)로 컴파일해준다. 컴파일된 바이트 코드는 Java ..
mvnrepository 사용법
·
Backend/Spring Boot
1. https://mvnrepository.com/ 접속 2. 필요한 API 또는 라이브러리 검색 3. 사용할 버전 선택 4. Maven에 있는 코드 복사 후 스프링 프로젝트의 pom.xml에 추가 5. 끝 ! 간단합니다.
무료 API들
·
Backend/Spring Boot
발할때 유용하게 써먹을만한 무료 API들입니다. 토이 프로젝트 할때 요긴히 사용 할 수 있을 것 같습니다. JSON Placeholder (https://jsonplaceholder.typicode.com/) : 테스트용 가짜 데이터를 제공하는 API. Google Translate (https://cloud.google.com/translate/docs/) : 한달에 50만 요청까지 무료로 사용 가능한 번역 API. Open Weather Map(https://openweathermap.org/api) : 날씨 정보를 제공하는 API. REST Countries ((https://restcountries.com/) : 나라 정보를 제공하는 API. 나라 이름, 수도, 인구, 통화, 언어 등등. IP A..
쿼리 파라미터 로그 남기는 방법
·
Backend/Spring Boot
방법1. application.yml 파일에서 다음과 같이 설정 logging : level : org.hibernate.type : trace 2. 외부 라이브러리 사용하기 (p6spy) 스프링부트를 사용하면 이 라이브러리만 추가하면 된다. implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6' https://github.com/gavlyukovskiy/spring-boot-data-source-decorator GitHub - gavlyukovskiy/spring-boot-data-source-decorator: Spring Boot integration with p6spy, datasource-proxy, flexy-poo..
@Configuration과 ComponentScan에 대한 궁금증 타파
·
Backend/Spring Boot
package hello.core; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.FilterType; @Configuration //ComponentSacn은 bean을 전부 검색해서 담는 과정을 수행함, 정확히는 @Componet가 붙은 녀석들을 전부 담아줌 @ComponentScan( //AppConfig에 등록한 Configuration을 제외해주는 과정 excludeFilters = @ComponentScan.Filter(type = Filter..