Programming-[Backend]/Spring (76) 썸네일형 리스트형 [스프링 기초] 2. 객체 지향 프로그래밍의 특징. 자바 스프링 1. 객체 지향 프로그래밍이란 프로그램은 행사나 연주회 등에서 "XXX 프로그램" 이라고 말하는 것처럼, 작성해놓은 코드가 한 줄씩 차례대로 실행되는 순차적인(절차적인) 방식으로 동작한다. 절차지향 프로그래밍이란, 이런 프로그램의 기본적인 특성에 맞춰서 하나의 파일을 순차적으로 실행되도록 구성하는 것을 말한다. 그러나 객체 지향 프로그래밍은 단순히 한개의 파일에서 순서대로 작성해놓은 코드가 실행되도록 하는 것이 아니라, 여러 개의 독립된 단위, 즉 "객체" 들의 모임으로 프로그램을 바라보는 시각을 말한다. 자바에서는 클래스나 인터페이스 파일들이 객체라고 할 수 있겠다. 이렇게 생성된 객체들은 서로 데이터를 주고받으며 동작한다. 객체들끼리 데이터를 주고 받으며 작동하는 프로그램을 만드는 이유는, 프로그램을.. [스프링 기초] 1. 스프링의 탄생, 기본 개념 1. EJB(Enterprise Java Beans) 자바는 2000년대 초에는 EJB라는 기술을 사용했다. 자바의 표준 기술이였고, 컨테이너 기술, 트랜잭션 설정 기술, 분산 처리 기술, ORM 등이 잘 지원되었다. 그래서 금융권 등에서 많이 활용되었다. 그러나 수 천만원 가량의 비싼 비용이 들었고, 어렵고 복잡하고 느려서 사용하기가 매우 힘든 기술이였다. 그래서 순수 자바를 의미하는 POJO(Plain Old Java Object)를 쓰자는 논의가 오갔지만 기술수준이 낮아서 제대로된 기능을 구현하기가 어려웠다. 그래서 2002년 Rod Johnson이란 분의 Spring(Rod Johnson 이후 Juergen Hoeller, Yann Caroff와 함께 Spring 프로젝트 완성), 2001년 Ga.. [TIL] PO(Parameter ObjecT)와 DTO(Data Transfer Object)는 구분해서 쓰자 만약 PO가 아래와 같이 구성되어 있는 상황이라면, 즉 어떤 PO 내부에 또 다른 PO(...CreateContactsPo)가 있는 상황이라면 각각의 PO에 해당하는 DTO를 1:1로 매칭하듯이 구성하여야 한다. 이렇게 해서 Mapper를 이용하여 정확히 PO를 DTO로 치환해주고, 각 개체를 구분시켜줄 수 있기 때문이다. 가장 중요한 이유는 DTO는 component에 포함되어 있고 PO는 controller에 포함된 구조이기 때문이다. 각 패키지에 있는 파일들이 독립적으로 유지되어 있어야 추후에 분리될 상황이 오더라도 문제없기 때문이다. 이것도 객체지향적 방식이라 할 수 있을까...? [에러] Cannot deserialize instance of, Leading zeroes not allowed, Swagger 스웨거 날짜, 리스트 입력 현상 1. Cannot deserialize instance of... 2. Leading zeroes not allowed... 원인 1. (Swagger에서) 파라미터 값을 잘못 입력하여 Java 가 해당 값들을 제대로 파싱하지 못하는 경우 2. (Swagger에서) 파라미터 값으로 날짜를 입력할 때, 0을 앞에 붙인 경우. 예를 들어 2020-08-23으로 입력 (2020-8-23으로 입력해야함) 해결 선제조건 기본적으로 파라미터의 @Schema 정의 시에, example 부분을 안적으면 Swagger의 입력화면에서 자동으로 입력 양식을 잡아준다. 컨트롤러에서 파라미터 부분에 @RequestBody 어노테이션을 붙여준 경우이다. 파라미터로 날짜를 정의할 때, @DateTimeFormat으로 날짜 형.. [에러] THE INSERT statement conflicted with the FOREIGN KEY constraint... 현상 save 처리 시에, THE INSERT statement conflicted with the FOREIGN KEY constraint 라는 문구와 함께 에러 발생 원인 Foregin key(FK)로 넣을려는 데이터의 id가 실제 테이블에 없을 때 발생한다. 예를 들어 아래와 같이 Members 엔티티가 Emails 엔티티를 @ManyToOne으로 FK로 연결된 상황이라면, Members 엔티티를 저장할 때 Emails 엔티티의 id 값이 Emails 테이블에 존재하여야 한다. Emails 테이블에 id값이 id = 2인 부분이 없는데, Member 엔티티 저장 시 Emails 엔티티의 id값을 2로 지정하면 에러가 발생하는 것이다. 해결 존재하는 id값만 넣어준다. 다른 해결책은 아직 모르겠음.. [에러] SQLServerException : Cannot insert the value NULL into column ... column does not allow nulls. INSERT fails 현상 빌더 패턴 방식을 이용하여 Entity를 만들고, XxxRepository.save(XxxEntity)로 DB에 Entity 값을 저장하려는데, 아래와 같이 Cannot insert... 에러가 발생했다. 에러 화면 빌더 패턴으로 Entity 만들기 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 XxxEntity xxxEntity = XxxEntity.builder() .Column1(Column1에 들어갈 값) .Column2(Column2에 들어갈 값) .Column3(Column3에 들어갈 값) .Column4(Column4에 들어갈 값) .Column5(Column5에 들어갈 값) //원인 : 요 사이 값들은 필수값 인데도 안넣어줌 .Column10(Colu.. [TIL] DB save 테스트 Id값 증가, Auto Increment 값은 transaction에 포함되지 않음 현상 @DataJpaTest를 이용하여 Save 테스트를 하면, 자동으로 Rollback이 되므로 DB 상에 데이터가 들어가지 않는다. 하지만, 여러 번 테스트 후에 Rollback을 하지 않고 실제 데이터를 넣어 보면, 아래와 같이 id값이 증가되는 것을 볼 수 있다. 원인 이것은 Auto increment가 적용되는 id 값은 rollback 되지 않기 때문이다. 정확하게는 Auto increment 값은 transaction에 포함되지 않기 때문에 내부적으로 id값이 증가하므로 실제 save 시에 증가된 id값이 적용되는 것이다. 해결 이런 경우 id 값을 ALTER TABLE {테이블명} auto_increment = {원하는 id값} 을 입력하여 변경해줄 수 있다.(참조1) 추가 Rollback.. [TIL] Swagger 날짜 입력 : @DateTimeFormat- Controller의 파라미터 중 LocalDate 처리 Swagger에 날짜 입력을 하려고 하니, 타입 에러가 발생했다. 이럴 때는 Controller의 파라미터 오브젝트를 표기해주는 부분에 @DateTimeFormat을 붙여주어 날짜 타입의 포맷을 명시해주어야 한다. Controller에 데이터를 전달해주는 파라미터 오브젝트(PO) 파일 중 한 개의 필드 pattern 옵션으로 원하는 양식대로 포맷을 설정해주면, 아래와 같이 Swagger에서 정상적으로 날짜 타입을 입력할 수 있다. Swagger 화면 입력 만약 RequestBody로 처리해야되는 상황이면 @JsonFormat을 사용해야 한다. 자세한건 아래 링크. [TIL] @JsonFormat으로 @DateTimeFormat 대신 Date까지만 받기 이전 1 ··· 6 7 8 9 10 다음