본문 바로가기

java12

[Java] Thread 클래스와 ThreadPoolExecutor 클래스 단순 Thread 클래스를 사용하게 되면? 자바8 기준 사용자 레벨 스레드를 사용하지 않음 JVM을 통해 OS의 시스템콜을 호출하여 커널 스레드를 1:1로 할당 받음 ⇒ 스레드 생성 비용이 너무 크다!!!!!!!!!!!!!!!!!!!!! (스레드 맵핑과 관련한 글은 아래 글에서 확인하실 수 있습니다.) 2023.09.10 - [컴퓨터공학/운영체제] - [운영체제?] 스레드의 종류(하드웨어스레드, 커널레벨스레드, 유저레벨스레드) 헉! 그럼 자바에서 스레드를 사용하면 비효율적이네요! 하지만 당근빠따루 스레드풀을 사용할 수 있음 concurrent 패키지의 ThreadPoolExecutor 클래스로 사용 ⚠️ Executors.newFixedThreadPool(100)로 생성 시 작업 큐 사이즈가 Intege.. 2023. 9. 10.
[Java] Lambda, Functional Interface 그리고 Stream API 이브, 프시케 그리고 푸른 수염 어쩌고 따라하고 싶었어요ㅎㅎ.. Lambda 익명 함수로써 이름 없이 정의되며, 코드 블록을 1급 시민으로 다룰 수 있는 프로그래밍 언어의 기능 🧐 1급 시민 First-Class Citizen | 1급 객체 변수에 할당할 수 있어야 한다. 함수의 매개변수로 전달할 수 있어야 한다. 함수의 리턴값으로 사용할 수 있어야 한다. 함수나 메소드가 1급 시민으로 간주되기 위한 조건 함수형 프로그래밍 스타일을 지원 코드를 간결하게 관리 주로 컬렉션 처리, 스트림 연산, 콜백 함수 등에 사용 → 자바에선 함수를 일급시민으로 쓸 수 없었음, 람다 개념 등장 → 일급시민으로 사용할 수 있게됨 람다 표현식 작성방법 어떤 언어에서든 익명함수를 다 써보셨을 거라고 예상됩니다. 자바에서도 마찬.. 2023. 9. 8.
Spring Triangle - POJO, IoC, AOP, PSA POJO Plain Old Java Object 오래된 방식의 자바 오브젝트 클래스나 인터페이스를 상속 받지 않고, 메소드가 추가된 클래스가 아닌 getter, setter 같은 기본적인 기능만 가진 자바 객체를 말한다. 우리는 사람들이 자기네 시스템에 보통의 객체를 사용하는 것을 왜 그렇게 반대하는지 궁금하였는데, 간단한 객체는 폼 나는 명칭이 없기 때문에 그랬던 것이라고 결론지었다. 그래서 적당한 이름을 하나 만들어 붙였더니, 아글쎄, 다들 좋아하더라고. - 마틴 파울러 그렇다고 합니다... POJO는 엄청난 개념이 아니라 적당한 명칭 정도로만 이해하면 됩니다. IoC 제어의 역전 Inversion of Control 제어의 역전이 뭐임! 사실 제어의 역전은 스프링만의 특징이 아니다. 프레임워크의 흔.. 2023. 9. 6.
Java JVM 아키텍쳐 (1) 먼저 Virtual Machine 이란? 수업을 듣다보면 가상 머신을 다뤄 본 적이 있을 것이다. 자신의 하드웨어 위에 또 다른 OS(Guest OS)를 실행하게 해주는 것이 VM의 역할이다. 그런 VM이 자바에도 있다! 연관해서 생각해 본 적이 없었는데, 생각해보니 JVM의 VM이 virtual machine 이다. JVM은 무엇인가? JVM은 추상 머신이다. 자바 바이트 코드를 런타임 환경에서 실행할 수 있게 해준다. JVM은 많은 하드웨어나 소프트웨어에서 사용 가능하다. Implementation(JRE, Java Runtime Environment)에 따라서 JVM 동작 알고리즘을 선택할 수 있다. 무슨일을 하는가? VM인만큼 스스로 메모리 관리를 한다. Loads code Verifies cod.. 2023. 7. 16.
[서평 23년-20] 자바와 JUnit을 활용한 실용주의 단위 테스트 독서기간_2023년 2월 중순? 저자_제프 랭어, 엔디 헌트, 데이브 토마스 출간일_2019년 7월 3일 Java, JUnit만으로 테스팅을 공부할 수 있는 아주 좋은 책이다. 작년 10월쯤 우아한테크코스를 준비하면서 단위 테스트에 제대로 입문했었다. 우테코 이전에는 Spring Boot 공부하면서 테스트 코드를 작성하는데, Mock과 Inject의 개념이 잡혀있지 않은 채로 작성하려니 머리가 깨질 것 같았었다. (그때 Mock이란 개념을 처음 알긴 했지만...) 구글링해가면서 이렇게 로직을 테스트하는구나... 어림짐작하면서 코딩했었다. 남들이 when, then, mock 쓰니까 이렇게 하나보다...하고 이 책은 공채도 끝나고, 할 일도 없어서 읽기 시작했다. 그런데 굉장히 양질의 정보를 얻을 수 있었.. 2023. 5. 6.
[Spring Boot] 개인 정보가 담긴 Jwt 토큰 발급 후 Cookie로 반환하기 oAuthService에 Jwt 토큰을 발급하는 메서드를 추가했다. public String generateJwtToken(MemberInfoDto info) { Map payloads = new HashMap(); Map headers = new HashMap(); headers.put("alg", "HS256"); headers.put("typ", "JWT"); payloads.put("name",info.getName()); payloads.put("picture", info.getPicture()); payloads.put("oauthId",info.getSub()); return Jwts.builder() .setHeader(headers) .setClaims(payloads) .setIssue.. 2023. 4. 4.
[Spring Boot] Security 없이 OAuth2 Google에서 받은 id_token 사용해 회원 정보 저장하기 2023.03.27 - [Project/모면] - [Spring Boot] Security 없이 OAuth2로 Google 로그인 구현, 유저 정보 얻기 이전 시간에 access_token을 발급받아오는 작업까지 마쳤다. 이제 id_token 안의 정보를 복호해 으로 만들어버리자. 먼저 RestTemplate을 이용해 POST 요청을 보내는 코드를 수정했다. ResponseEntity responseEntity = restTemplate .postForEntity(GOOGLE_TOKEN_URL, params, GoogleOAuthResponseDto.class); package com.momyeon.backend.dto; import lombok.AccessLevel; import lombok.Gette.. 2023. 4. 3.
[Java] String to Json 파싱하기 | Jackson ObjectMapper 온갖 JSON 파싱 방법 찾아서 적용하니까 코드가 더럽거나 실패했다. 그나마 가장 깔끔한 방법을 찾아서 공유한다!!!! 파싱 유목민 여기서 정착하다... 공식 문서 : https://www.baeldung.com/jackson-deserialize-json-unknown-properties import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; //.. 2023. 4. 2.