반응형 프로그래밍/스프링 자바14 DTO 의 사용범위 https://tecoble.techcourse.co.kr/post/2021-04-25-dto-layer-scope/ 2023. 3. 4. [Java] Java enum 활용 https://techblog.woowahan.com/2527/ 2022. 7. 17. [JPA] N+1 문제 개념, 원인, 해결방안 [JPA] N+1 문제 ,개념, 원인 해결(@EntityGraph, Fetch) 관계를 갖고 있는 엔티티안에서 조회시에 발생할 수 있는 문제 1개의 쿼리를 원했지만 추가적으로 N번의 쿼리가 더 발생한다. @EntityGraph, Fetch 연관된 엔티티들을 SQL 한번에 조회하는 방법 Member N : 1 Team Member.class @ManyToOne Team team 실무에서는 지연로딩(FetchType.LAZY)을 사용하자 Team.class @OneToMay List members OneToMany는 Default가 Lazy전략이다 지연로딩 (LazyLoading) Member 조회시 Team은 각자객체로 조회해놓고 team을 사용하는 시점에 SQL이 별도로 날라간다. 설명 구현코드 //To.. 2021. 7. 13. [스프링 시큐리티] 스프링 시큐리티 + Jwt 흐름 알기 Spring Security 직접 구현하는 과정보다는 전체적인 플로우 개념에 대한 이해를 중점으로 진행한다. https://github.com/seongbinko/simple-order-app config 디렉토리에서 상세 내용은 확인 가능하다. 인증(Authentication)과 권한(Authorization) 인증: Id,Pw를 입력 받아 로그인 하는 과정 자체 권한: 보호된 리소스에 접근 가능한지를 결정하는 것을 의미 인가(Authorize): 권한을 부여하는 작업을 인가 Spring Security 구조 UserDetailsService 실제 DB에서 사용자 인증정보를 가져오는 역할을 한다. UserDetails UserDeatils객체를 통해 권한 정보를 관리하기 때문에 UserDetails를 .. 2021. 7. 12. TDD 방식으로 개발 예제 (Junit5) TDD 방식으로 개발 예제를 작성해 보았다. 로직 * - 점수가 70점 이상이면 PASS, 아니면 FAIL을 출력한다. TDD 방식 개발이 아닐 때 import java.util.Random; public class Example { public static void main(String[] args) { Random random = new Random(); for(int i = 0; i = 70) { System.out.println("PASS"); } else { System.out.println("FAIL"); } } } } TDD 방식으로 개발.. 2021. 7. 4. [Java] JVM, 자바 메모리, GC JVM 자바 가상 머신 자바 컴파일러로 .java파일을 컴파일한 .class() 바이트코드를 OS에 맞게 실행해 주는 프로그램 JIT, 운영체제에 영향을 받지 않고 돌아가기 때문에 플랫폼에 의존하지 않을 수 있다. 가비지 컬렉션를 수행한다. 자바 메모리 영역 메소드(클래스, 스태틱(정적)) 영역 하나의 JAVA 파일은 크게 필드(field), 생성자(constructor), 메소드(method)로 구성된다. 그중 필드 부분에서 선언된 변수(전역변수)와 정적 멤버변수(static이 붙은 자료형) Static 영역에 데이터를 저장한다. Static 영역의 데이터는 프로그램의 시작부터 종료가 될 때까지 메모리에 남아있게 된다. 다르게 말하면 전역변수가 프로그램이 종료될 때까지 어디서든 사용이 가능한 이유이기도.. 2021. 7. 3. [Spring] 스프링 개념 정리 Spring 11. 스프링은 무엇인가? 스프링은 좋은 객체지향 프로그래밍을 할 수 있게 도와주는 프레임워크이다. 12. 프레임워크 vs 라이브러리 프레임워크가 내가 작성한 코드를 제어하고, 대신 실행하면 그것은 프레임워크가 맞다. JUnit 라이프 사이클 속에서 내코드를 작성 어플리케이션의 flow를 누가 제어하는냐가 프레임워크인지 라이브러리인지 구분할 수 있다. 반면에 내가 작성한 코드가 직접 제어의 흐름을 담당한다면 그것은 프레임워크가 아니라 라이브러리다. public static void main(String[] args) { new 함수 호출 등} 13. 스프링과 객체지향은 어떤 관계인가? 스프링의 IOC, DI는 다형성을 활용해서 역할과 구현을 편리하게 다룰 수 있도록 지원한다. 스프링은 다음 .. 2021. 6. 30. 객체 지향 프로그래밍이 정리 (OOP 정리) OOP 1. 객체지향 프로그래밍은 무엇인가? 객체 지향 프로그래밍은 어떤 속성과 동작을 가진 객체를 만들고, 객체들을 조립하여 하나의 프로그램을(상호작용을 하는) 만드는 방법을 객체지향 프로그래밍이라 한다. 2. 객체 프로그래밍의 장,단점 설명 장점 코드 재사용이 용이하다. 남이 만든 클래스를 가져와서 이용할 수 있고 상속을 통해 확장할 수 도 있다. 유지보수가 쉽다. 절차 지향 프로그래밍에서는 코드를 수정해야할 때 일일이 찾아 수정해야 하는 반면 객체 지향 프로그래밍은 수정해야 할 부분이 클래스 내부의 멤버 변수혹은 메서드로 있기 때문에 해당 부분만 수정하면 됨 프로그램을 유연하고 변경 용이하게 만든다. 단점 처리속도가 상대적으로 느림 객체가 많으면 용량이 커질 수 있음 설계시 시간과 노력이 필요 3... 2021. 6. 28. JUnit5 정리 테스트 코드 프레임워크 Junit5 자바의 테스트 코드 작성을 도와주는 프레임워크 @Autowired 필드 주입 방식 사용 이유 테스트 프레임워크에서는 생성자 매개변수 관리를 Jupiter가 담당한다. 그래서 생성자 주입이나 롬복을 사용시에 parameterResolver를 찾아도 나오질 않으므로 에러를 뱉는다. @Autowried를 명시적으로 선언하면 Jupiter가 Spring Container에게 빈 주입을 요청할 수 있게 되어 코드 작성이 가능하다. 추후 계속 업데이트 예정 2021. 6. 28. TDD , 단위 테스트, 리팩토링 TDD 테스트가 주도하는 개발 요구사항이 급변하는 개발문화에 적합한 개발방법론 테스트코드를 먼저작성한다. Red → Green → Refactor 사이클 실패하는 테스트를 먼저 작성하고, 테스트가 통과하는 코드를 작성하고, 통과하면 프로덕션 코드를 리팩토링 한다. 단위 테스트 코드 (Unit test) TDD 첫번째 단계인 기능 단위의 테스트 코드를 작성하는 것 TDD와 달리 테스트 코드를 먼저 작성해야 하는 것도 아니고, 리팩토링도 포함되지 않는다. 장점 빠른 피드백 기존방식 코드작성 Tomcat 실행 Postman과 같은 API 테스트도구로 HTTP 요청 System.out.println()으로 눈으로 검증 결과 다르면 Tomcat중지하고 코드 수정 코드수정시마다 톰캣을 다시 실행하는 시간을 줄일 수.. 2021. 6. 28. [Spring] Spring MVC 이동 구조 (feat. jsp) 클라이언트의 요청을 DispatcherServlet이 받는다. DispatcherServlet는 요청 URI을 HandlerMapping에게 보낸다. HandlerMapping은 요청 URI와 매핑되는 컨트롤러 요청핸들러메소드(String newbooks(Model model)) 정보를 Dispatcher에게 반환한다. DispatcherServlet은 컨트롤러, 요청핸들러메소드 정보를 HandlerAdapter에게 보내고, 요청핸들러메소드의 실행을 위임한다. HandlerAdapter는 요청핸들러 메소드의 시그니처를 분석한다. 요청핸들러 메소드의 매개변수에 Model타입의 매개변수가 있음을 확인한다. HandlerAdapter는 Model 객체를 생성한다. 요청핸들러 메소드를 실행한다. Model mo.. 2021. 4. 20. [Java] 자바 JDBC 정리 JDBC Java DataBase connectivity 자바가 데이터베이스에 접속해서 SQL(DDL,DML,DCL)를 실행할 수 있도록 하는 표준기술이다 java.sql 패키지와 javax.sql 패키지에 관련 인터페이스와 클래스가 존재한다. ( 불편해서 db 에세스가 쉽게 만든 프로그램들이 있음 mybatis) 주요 API Connection 인터페이스 자바프로그램과 데이터베이스간의 연결을 담당하는 객체다. Statement createStatement() SQL전송을 담당하는 Statement객체를 말한다 PreparedStatement prepareStatement(String sql) SQL전송을 담당하는 Statement객체를 반환한다. void commit() SQL실행결과를 DB에 반영시킨.. 2020. 11. 8. [Java] 자바 식별자 예약어 식별자 다른것과 구분하기 위한 이름 (클래스 이름, 함수명(기능), 변수명) 클래스이름, 기능이름은 중복X. 변수 =* 그릇 저장소 ex) 10 240 년수 개월수, deleteStudentInformation (자바의 관례 c언어는 _ 사용) 첫글자: 문자 _ 1 $ 만 가능하다. 공백 특수문자 x 두번째: 문자 _ $ 숫자 가능하다. 공백 특수문자 x 대소문자는 항상 구분이 되어야한다. 설계도의 이름(클래스)은 대문자로 시작하지만 그외의 모든 식별자는 소문자로 시작 System, String는 빌트인된 설계도여서 대문자이다 . 검정색은 전부 식별자이다(함수이거나 등등) 자바의 예약어 자바에서 특별한 목적으로 사용되도록 미리 정해진 키워드 예약어는 식별자로 사용할 수 없다, 식별자 이름을 if 나 fo.. 2020. 11. 8. [Java] 자바 특징과 설계도 JAVA 자바 개발도구 및 실행환경 설치 JDK(Java Development Kit) - 자바프로그램을 컴파일, 실행, 문서화 지원 JRE(java Runtime environment) 자바 프로그램을 실제로 실행하는 프로그램 java 특징 문법이 간단 객체지향 프로그래밍을 지원 → 동일한 제품(객체) 여러개 생성가능 고유한 기능을 제공하는 제품(객체) 플랫폼 독립적 플랫폼: HW / SW(운영체제) 다양한 오픈소스 (eclipse) 카톡(안드로이드) 카톡(애플) → 객체 종속적 올인원x 각기 객체를 만들어 유지보수 쉬움 설계도(클래스) → 제품(객체) 프로그램의 실행방법에 따른 구분 컴파일언어 (소스파일을 실행파일로 바꾸는 과정이 컴파일한다) C ,C++ JAVA 소스파일(코드작성) →[컴파일한다] .. 2020. 11. 8. 이전 1 다음 반응형