본문 바로가기
반응형

프로그래밍27

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.
일급 컬렉션 (First Class Collection) https://jojoldu.tistory.com/412 2022. 7. 17.
객체지향 생활체조 원칙 9가지 (from 소트웍스 엔솔러지) 한 메서드에 오직 한 단계의 들여쓰기만 한다. else 예약어는 쓰지 않는다. 모든 원시값과 문자열을 포장한다. 일급(first-class) 컬렉션을 쓴다. 한 줄에 점을 하나만 찍는다. 줄여쓰지 않는다(축약 금지). 모든 엔티티(entity)를 작게 유지한다. 2개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다. getter, setter, property를 쓰지 않는다. +상태와 행위를 한 곳에서 관리하자. 참조: https://limdingdong.tistory.com/7 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.
[파이썬] 배열 복사 (얕은카피와 깊은카피) import copy graph = [1,2,3,4,5] new_graph = graph new_graph[4] = 3 print(graph) # 1,2,3,4,3 print(new_graph)# 1,2,3,4,3 print() new_graph2 = copy.deepcopy(graph) new_graph2[4] = 5 print(graph) # 1,2,3,4,3 print(new_graph2)# 1,2,3,4,5 알고리즘 테스트를 보다가 그래프를 반복문의 변수가 증가할 때 마다 초기화 해줘야 하는 경우가 생겼다. 그런데 원본과 카피본이 같은 주속값을 바라보게 되서 초기화하는데 어려움이 있었다. 이럴 땐 deepcopy라는 메소드로 해결 가능하다 2021. 3. 20.
[파이썬] print() 원하는 양식으로 출력하기 (백준 11866 요세푸스 문제) 출력 원하는 방식으로 출력해야 할 때 필요한 코드들이다. 백준 11866 요세푸스 문제를 풀 때 막힌 부분이 출력이어서 정리한다. 2021.03.16 - [Problem-solved (코딩테스트 문제풀이)/python] - [백준] 요세푸스 문제0 11866 (파이썬) [백준] 요세푸스 문제0 11866 (파이썬) 스케치 코드 기본적으로 큐를 활용해서 문제를 풀면 되지만 K번째 값을 뽑는 도중 Q가 K보다 작아지게 될 때를 유의하여 처리하여야 한다. Q < K 작은 구간은 나눗셈으로 인덱스를 뽑아서 구현하 seongbindb.tistory.com # Python 3.6 이상 # 로 출력하고 싶을 때 arr = [1,3,5,7,9] print(f"'{arr}를 양식에 맞게 출력합니다'") # '[1, 3,.. 2021. 3. 18.
반응형