자바 12

[탐험] 테스트하기 좋은 코드, private과 given이 너무 많을 때

대략적으로 공부하고 깨달은 부분이라 정확하지 않을 수 있다. 개발 업무를 해나가면서 계속해서 개선할 내용이니, 일단 참고만 하자 문제상황 테스트 코드를 작성하는데 public 메서드 1개에 여러 개의 private 메서드가 포함되었다. 많은 참조 자료에서 private 메서드를 테스트하는 것은 바람직한 방향이 아니라고 한다. ( 참조 3. 자바에서 private 메서드를 import할 때 Reflection을 사용하게 되는데, Reflection은 컴파일 에러를 유발하지 못하므로 메서드 이름 변경 등에 취약하다. 그리고 애초에 private은 외부 참조가 안되도록 만들어놓고 결합도를 낮추어 놓은 측면이 있는데, 이를 무시하게 되는 것이 된다.) 그러나 각 메서드를 private으로 처리한 것은 정말 해당..

[TIL][링크] 자바 리스트 stream split 처리 - groupingBy

Java8 Collectors groupingBy Map groups = testList.stream().collect(Collectors.groupingBy(i -> i / 3)); List listByCollectors = new ArrayList(groups.values()); //will be.. listByCollectors = {ArrayList@1058} size = 4 0 = {ArrayList@1093} size = 3 1 = {ArrayList@1094} size = 3 2 = {ArrayList@1095} size = 3 3 = {ArrayList@1096} size = 1 출처: https://jinseongsoft.tistory.com/312 [진성 소프트]

[TIL] 웹 업무 자동화, 크롤링 툴 ; 셀레니움, 셀레니움 IDE, 퍼펫티어(puppeteer) 자바, 자바스크립트

1. 자동화 서버 제작(셀레니움) 복잡한 기능도 구현이 가능하다 느리다 운영환경별로 세팅이 필요하다 자바 및 JVM을 사용한 업무 자동화 툴은 셀레니움이 있다. 자바에서 라이브러리 dependency를 추가하고 크롬 드라이버를 다운로드 받아서 사용하면 된다. 대략적인 코드는 구글링 해보면 많이 나온다. 의존성 추가 코드 org.seleniumhq.selenium selenium-java 3.141.59 크롬 드라이버 설치 사이트 크롬 -> 설정 -> Chrome 정보에 들어가서 버전을 확인하여 알맞는 버전을 다운로드 받아야 한다. https://chromedriver.chromium.org/downloads 2. 셀레니움 IDE 사용 레코드 베이스라 사용하기 편리하고 간단하다 복잡한 자동화는 어렵다 문법..

[스프링 시큐리티] 8. 위조 방지 : CsrfFilter

1. CSRF(Cross-site Request Forgery) 공부해봤던 공격 방식이다. 쇼핑몰 사이트에 사용자가 로그인을 해서 토큰을 가진채로 공격자가 보낸 링크를 클릭하는 경우, 공격자가 해당 쇼핑몰 사이트에서 배송지를 변경하는 javascript 코드를 심어놓았다면 서버는 사용자의 토큰과 이 코드를 신뢰하여 공격자의 의도대로 배송지를 변경해버리게 된다. 즉, 사용자의 의도와는 무관하게 서버에 요청을 하는 공격 방식을 말한다. 이를 방지하기 위해서 서버는 사용자의 요청 시마다 난수로 생성되는 CSRF Token을 발행한다. 이 토큰은 페이지에 hidden 객체로 들어가게 된다. 그리고 요청시마다 서버에 보내어 토큰의 일치 여부를 서버에서 판단하기 때문에, 공격자가 사용자의 세션 정보를 갖고 있다하더..

자바 Json 파싱, 값 추출하기 : JSONObject, JSONArray

1. Json 구조 Object 구조 Json 데이터를 파싱해서 가져오기 위한 첫 걸음은 Json의 구조를 이해하는 것이다. Json의 구조는 다음 3가지 방식이 있을 수 있다. JsonObject JsonObject 내부 JsonObject JsonArray { } - Culry bracket 으로 감싸진 것은 JsonObject, [ ] - square bracket으로 감싸진 것은 JsonArray 필드값 규칙 key-value에서 key값은 반드시 쌍따옴표 " " 로 감싸야한다. value 값은 Boolean이나 Integer는 그대로 쓰되, 나머지는 쌍따옴표 " "로 감싸야한다. 2. 예제 및 파싱해보기 예제 데이터 예제는 참조1의 데이터를 복사해왔다. batter의 id값들을 모두 추출해보자...

[TIL][TDD] TDD 4편. 자바 Reflection 의 원리와 활용, Spring의 ReflectionTestUtils.invokeMethod

1. Reflection의 정의와 원리 자바의 Reflection은 어떤 클래스의 구현 내용을 모를 때, 해당 내용들을 조회할 수 있도록 자바에서 제공하는 API라고 한다. 이것은 참조 2에 따르면, 자바는 클래스 파일을 바이트 코드로 컴파일하여 static 영역에 위치하게 되므로 여기서 해당 클래스의 정보를 가져올 수 있는 것이라고 한다. 가져올 수 있는 정보는 아래와 같다. ClassName Class Modifiers Package Info Superclass Implemented interfaces Constructors MethodsFields Annotations 2. Reflection 사용해보기 TestClassForReflection라는 클래스를 임시로 만들고 .class 뒤에 .을 붙이..

[TIL] 자바 리스트 2개 이상 stream으로 순차적으로 비교 처리하기 : LongStream, IntStream

for문을 안쓰고 길이가 같은 리스트의 정보들을 순차적으로 처리할려면, stream 문법으로 LongStream 또는 IntStream을 사용하면 된다. for(int i = 0; ...) 을 쓰지 않는 방법이다. 1 2 3 4 5 6 7 8 9 10 int size = AList.size(); List result = IntStream.range(0, size).boxed().map(i -> { ADto aDto = AList.get(i); BDto bDto = BList.get(i); //필요한 로직 처리... //ex) aDto.setName(bDto.getName()); return aDto }).collect(Collectors.toList()); Colored by Color Scripter cs

[TIL]자바 리스트 중복 항목만 추출 : indexOf, lastIndexOf, HashSet 활용

자바의 리스트에서 중복된 항목들만 뽑아내기 위해 indexOf, lastIndexOf, HashSet을 활용한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 @Test void overrodeTest() { List list = List.of("사자", "호랑이", "사자", "토끼", "거북이", "거북이", "사자"); HashSet hs = new HashSet(); for (String el : list) { if (list.indexOf(el) != list.lastIndexOf(el)) { hs.add(el); } } System.out.println("hs = " + hs); } Colored by Color Scripter cs 출력결과 원리 List.indexOf : 리스..

[스프링 기초] 7. IoC, DI, 컨테이너

1. IoC(Inversion of Control) : 제어의 역전 이전 글에서 사용영역과 구성 영역을 구분함으로써 객체 지향 설계 원칙을 지킬 수 있었다. 구성 정보를 설정하는 AppConfig 클래스를 만들어서 객체를 생성하고, 할당하였다. 이전글 : 6. 사용영역과 구성영역 나누기로 SRP, OCP, DIP 원칙 실현하기 IoC는 용어의 이름에서 알 수 있듯, 구성 정보를 내가(실행 코드가 있는 객체가) 직접 설정하는 것이 아니라, 외부(라이브러리, 프레임워크 등)에서 이런 과정을 대신해주는 것을 의미한다. -> AppConfig.class 파일에서 구성 정보를 설정해주는 것도 IoC라고 할 수 있다. 2. DI(Dependency Injection) DI는 직역하면 '의존 관계 주입' 이지만, 좀..

[링크] 자바 final 요약

참조1. 링크 요약 -final은 클래스, 메서드, 변수에 붙일 수 있다. -final로 선언하면 해당 객체가 변하더라도 원래 선언 시에 할당되었던 값으로만 객체를 참조한다. -final이 붙은 클래스는 상속 불가 -final이 붙은 메서드는 오버라이드 불가 -final이 붙은 변수는 재할당 불가 참조 1. 개발왕 도던님의 블로그 https://makemethink.tistory.com/184