분류 전체보기 358

가볍게 읽어보는 Kotlin) 3. 제어문

안녕하세요. 지난 글에 이어서 이번에는 코틀린에서의 제어문에 대해 알아보려고 합니다. 기존에 이미 자바에 대해 알고있는 개발자들을 대상으로, 코틀린이 java와 다르다고 하는데 얼마나 많이 그리고 어떤것들이 다른지를 알기 쉽게 간단하게 안내하는걸 목표로 한 시리즈 입니다. 기본적으로 자바의 문법을 알고 있음을 전제로 하고 어떤 점들이 다른지 간략하게 코틀린의 제어문에 대해 알아보겠습니다. 조건문 IF if 의 사용은 사실 특별할 게 없기 때문에 거의 같습니다. 자바에서 처럼 if와 else를 활용해서 다양한 조건을 걸어 줄 수 있습니다. val a1 = 5 if (a1 < 10) { println("a1 < 10") } else if (a1 > 10) { print("a1 > 10") } if (a1 =..

Programming/Kotlin 2022.04.10

java) 래퍼 클래스의 동등 연산자 사용을 피해야 하는 이유

Intro 매주 일요일 11시 30분부터 오후 1시까지, Leetcode에서 진행하는 Contest에 참여하고 있습니다. 여느 날처럼 문제를 풀고 있었고, 로직상 분명 통과 할 거라고 생각했는데, 생각지도 못한 엉뚱한 곳에서 자꾸 무한 루프가 발생하는 일이 생겼습니다. 그래서 디버깅을 진행 하던 중 눈으로 보고도 믿기 힘든 상황이 발생 했습니다. 디버거의 Variables 를 보면, poll 의 value도 128, peek의 value도 128 이지만, 둘의 동등 비교 결과인 same의 결과가 false 로 되어 있습니다. 이 때문에 if 문에서 조건 만족 상황의 블럭에 들어가지 않고 else 구문을 타고 있습니다. 순간적으로 당황을 하긴 했지만, 예전에 같은 경우가 한번 있었고, 그때는 단순 버그나 ..

Programming/Java 2022.04.10

Chrome 에서 Netflix 혹은 인프런 검은화면에 소리만 나올때 해결방법

Intro 지금은 해결을 했지만 대충 까만색 네모를 그려 재현을 한 모습. 인프런 영상을 듣는데, 이전에는 아무 문제가 없었는데 며칠 전 부터 크롬으로만 켜면 영상이 까만 화면만 나오며 소리만 나온다. 현재 Belkin사의 Display Link 독을 활용해 외부 모니터 3개를 맥북에 연결해 사용하고 있는데, 기억상 처음 해당 제품을 샀을때 넷플릭스 영상을 볼 때도 같은 증상이 있었던 걸로 기억한다. 곧바로 넷플릭스를 틀어봤더니 역시나 영상은 까만화면만 나오고 소리만 들리는 같은 문제가 발생중. 원인 원인이 좀 복합적이긴 한데 근본적인 원인은 DRM 이다. 넷플릭스와 인프런의 공통점을 곰곰히 생각 해 보니 콘텐츠의 불법 사용과 유출을 방어하기 위해 DRM 기술을 적용 중이라는 점 이다. DRM은 Digi..

가볍게 읽어보는 Kotlin) 2. 함수와 연산자

Function 기본 함수호출 자바에서는 메서드를 사용하지만, 코틀린에서는 다른 프로그래밍 언어에서 처럼 함수 개념이 존재합니다. 일반적인 함수 사용법은 fun 함수명(파라미터){내용} 이며, 자바 코드로 변환될때는 클래스 내의 메서드로 바뀌게 됩니다. fun main() { printHello() } fun printHello() { println("Hello Kotlin") } 실행 결과 Parameter 함수에 파라미터를 넣을때는 자바와는 반대로 변수명:자료형 으로 작성 합니다. 재밌게도 자바에서 int a 라고 썼지만, 코틀린에서는 a: Int라고 작성 해야 합니다. fun main() { var a = 1 var b = 2 print("a + b = ${plus(a,b)}") } fun plus..

Programming/Kotlin 2022.04.07

가볍게 읽어보는 Kotlin) 1.기본 문법 및 변수와 자료형

Intro 코틀린은 Intelli IDEA를 개발한 JetBrains 사에서 공개한 오픈 소스 프로그래밍 언어 입니다. JVM 위에서 돌아가며 자바와 유사 하지만 간결한 문법과 다양한 기능 추가로 굉장히 호평을 받고 있습니다. 처음 공개된 2011년 에는 그렇게 큰 관심을 받지 못했지만, 오라클이 Java API 저작권으로 좋지 않은 신호를 계속 보이자 Google에서는 2017년 안드로이드의 공식 언어로 Kotlin을 추가 하였습니다. 그 때 부터 비약적인 관심을 받기 시작한 코틀린은 간결한 문법, 예외처리를 강제하지 않음, Null 안정성 등 으로 비약적인 생산성과 코드량 감소로 입소문을 타기 시작하였고, 이제는 흔히 네카라쿠배로 불리는 대기업 IT회사들을 필두로 여러가지 신규 서비스들이 코틀린으로 ..

Programming/Kotlin 2022.04.07

일간에러) application.yml 파일을 못읽을때 spring.config.location

문제 최근 프로젝트의 Spring Boot 버전을 1.5 에서 2.5로 마이그레이션을 진행 한 후 로컬에서 수많은 테스트를 거쳤습니다. 최근에는 개발 서버에도 올려서 정상적인 작동을 확인 하였고 이제 운영 서버에 반영을 시도 할 때가 되었습니다. 스프링부트 버전을 업그레이드 한 7개의 패키징을 갈아 끼우고, docker-compose up -d 을 외칩니다. 도커 컨테이너가 하나 둘 씩 문제없이 뜨기 시작합니다. status를 보니 UP, UP, UP, UP, UP, 그 가운데 슬며시 껴있는 Restarting 하나. 어플리케이션이 딱 하나 구동되지 못하고 계속 재 시작 되고 있습니다. 로그를 확인 해 보니 Caused by: java.lang.IllegalArgumentException: Could n..

Spring FW) 제로데이 취약점 CVE-2022-22965

SpringShell CVE-2022-22965 JDK9+ 버전을 사용해 Spring MVC 혹은 Spring WebFlux 어플리케이션을 구동하고 있다면 데이터 바인딩을 통한 원격 코드 실행(Remote Code Execution) 취약점에 노출 될 수 있다는 소식이 2022년 3월 31일 일요일에 공개되었습니다. 스프링 프레임워크가 워낙에 광범위하게 사용되고 있으며, 해당 취약점의 심각도가 높다 보니 CVSS 스코어가 9.8점으로 꽤나 높게 나왔습니다. 지금은 보통 SpringShell 혹은 Spring4Shell 라고 불리고 있는 해당 취약점에 대해 알아보겠습니다. 영향을 받는 환경 JDK 9+ Apache Tomcat을 서블릿 컨테이너로 사용 전통적인 WAR 패키징 (스프링 부트의 jar 패키징은..

IT Computer/News 2022.04.05

일간에러) Spring Session과 Cookie SameSite 정책

Intro SpringBoot 1.5 버전에서 2.5 버전으로 마이그레이션 작업이 대부분 완료 되었는데 SAML을 이용한 SSO 로그인 부분에서 굉장히 오래동안 해결하지 못하던 문제가 있었습니다. 분명 해당 부분의 코드는 전혀 변경이 없었는데 단지 스프링부트 버전이 달라졌다고 해서 예전 버전에서는 되고 지금은 안되는게 통 이해가 되지 않았습니다. 문제 일단 원인은 본 글의 제목처럼 Spring Session에서의 Cookie SameSite 정책 변경 때문이었습니다. 왜 이게 문제가 되었고 스프링부트 버전과 Cookie 정책이 어떤 연관관계가 있으며 어떻게 해결을 할 수 있는지에 대해 알아보겠습니다. 로그인 성공과 실패시 요청의 차이 SSO 로그인에 성공하던 요청 SSO 로그인에 실패하고 있는 요청 일단..

Docker) MariaDB 컨테이너 설치하기. IntelliJ IDEA 로 DB 접속하기

Intro 입사 전 국비학원에서 Oracle Database 교육을 몇주간 짧게 받은게 전부였는데 입사 후에도 맡은 프로젝트들에서 JPA를 사용하다 보니 쿼리를 직접 짤 일이 많지 않았습니다. 데이터베이스 공부를 따로 하려고 했는데 자바 심화과정, 스프링, JPA, 운영체제, 자료구조 및 알고리즘 등 평소 너무나도 공부하고싶었던 것들이 너무나도 많았다보니 자연스레 우선순위에서 밀려 아직까지도 손을 대지 못하고 있습니다. 업무중에 드문 드문 조금이라도 복잡한 쿼리를 짜내야 하는 일이 생길 때 마다 개념은 어렴풋 알고 있어도 정확한 사용법을 모르는 문법이나 함수 등을 매번 검색하다보니 병목이 생기는 구간이라는게 명백해졌습니다. 병목구간을 알면서도 외면하기엔 양심의 가책이 큽니다. 학습도 중요하지만 꾸준히 사..

Development/DevOps 2022.03.26

Linux) 리눅스에서 Apple Music 듣기 Cider App

Intro 저희집은 iPhone, MacBook, Apple TV, HomePod, iPad 등등 가족들이 사용하는 Apple 디바이스들이 많다보니 편의상 애플 뮤직을 꽤 오래 전 부터 구독 하고 있습니다. 13,500원인 Family Plan을 구독하면 무려 6명까지 제한 없이 음악을 들을 수 있습니다. 무려 세금도 포함한 금액으로, 꽉 채워 구독시 인당 2,250원이라는 믿기지 않는 가성비로 인해 잠시 Spotify 를 구독 하다가 다시 Apple Music으로 돌아온지도 이제 제법 되었습니다. 그런데 애플 기기에서는 Apple Music이라는 훌륭한 네이티브 앱이 있기 때문에 불편 없이 사용 할 수 있지만 윈도우즈에서 사용시 iTunes라는 멸종 위기의 소프트웨어를 사용 하거나 웹으로 접속을 해야 ..

IT Computer/Linux 2022.03.23

Ubuntu) Airpod 연결 설정 하기

우분투 20.04 에어팟 연결 설정 하는 방법 Intro 우분투에 에어팟을 연결 해 보려 하니 일반적인 Bluetooth 장비 메뉴로는 가능하지가 않았습니다. 일단 Unknown 장비들이 무지막지하게 뜨는데 그 중 어떤게 에어팟인지도 모르겠고, 연결도 되지 않았습니다. Bluetooth 설정 ControllerMode 변경 ControllerMode를 bredr로 변경 해 줘야 합니다. sudo vi /etc/bluetooth/main.conf 51 번 라인에 주석 처리된 걸 풀고 bredr를 입력 해 줍니다. Bluetooth 서비스 재시작 sudo /etc/init.d/bluetooth restart 블루투스 서비스를 재 시작 해 줍니다. Airpod 연결 이제 Settings > Bluetooth ..

IT Computer/Linux 2022.03.23

IntelliJ) 테스트 Live Templates 만들기

Intro 매번 테스트 코드를 만들 때 마다 반복해서 입력하는 @Test void test() { Assertion.assertThat() } 을 오늘도 여김없이 계속 입력하다가 이건 너무나도 비효율 적이란 생각이 들었습니다. 사실 클래스 생성시 애초에 기본 틀이 자동으로 만들어지도록 플러그인을 만들까 하다가 아직 거기까진 무리고.. 이클립스를 쓸 때에 이것 저것 추가해서 하던 것 처럼 인텔리제이에서도 당연히 기능이 있겠지 하며 찾아보니 Live templates이 눈에 띄었습니다. 그래도 여전히 커스텀 플러그인에 대한 필요성이 자주 느껴져서 올해 안에는 인텔리제이 플러그인을 만들어 보는게 목표 입니다. Live templates Preferences > Editor > Live Templates에 해당..

java) 151개의 포켓몬을 모두 모으려면 몇개의 포켓몬빵을 사먹어야 하는가

Intro 출처: 온라인 커뮤니티 포켓몬 빵으로 인해 간만에 온라인이 시끌벅쩍 합니다. 몇 해 마다 이런 특정 아이템의 품귀 현상이 반복되는데, 꼬꼬면과 허니버터칩에 이어 포켓몬까지 셋 다 전혀 다른 성격의 객체들이지만 잠깐의 유행에 그치고 말 것이란건 모두가 경험을 통해 잘 알고 있습니다. 20여년 전에는 맛 없는 빵을 먹는 것도 좋았고 스티커를 모으는 것도 설레였지만 아쉽게도 이제 둘 모두에 흥미를 잃었습니다. 다만 이번 상황을 접하며 모든 스티커를 다 모으려면 평균 몇개의 빵을 사야 하는지가 궁금해졌습니다. 실제 수많은 스트리머들이 수백개씩 빵을 벌크로 구매해서는 모든 스티커 모으기 컨텐츠를 진행하기도 합니다. 수학적인 풀이 방법도 있겠지만 컴퓨터에게 잘만 부탁하면 원하는 정보를 모두 계산해서 알려..

Programming/Java 2022.03.20

SourceTree Apple Silicon 지원 소식

Intro 정말 오래기다렸습니다. 사실 처음엔 기다린게 맞는데 진작에 포기하고 소스트리를 버린지 한참 되었습니다. 그러던 중 오랜만에 생각이 나 https://isapplesiliconready.com/ 를 확인 해 보니 M1 Native에 초록 불이 들어와 있었습니다. 그럼에도 atlassian 사이트에는 관련 언급이 따로 없길래 잘못된 정보인가? 하며 https://isapplesiliconready.com/app/SourceTree 다운로드 받아 설치를 해 보았는데 Apple Native로 잘 실행이 되었습니다. Git을 처음 접할 때 참 도움을 많이 받은 소프트웨어기 때문에 남다른 애착이 있었는데 반가운 마음에 소식을 가지고 왔습니다. 1년간의 이야기 듣기로는 SourceTree Mac 버전의 코..

IT Computer/News 2022.03.19

일간에러 More than one fragment with the name [spring_web] was found.

Intro Caused by: java.lang.IllegalArgumentException: More than one fragment with the name [spring_web] was found. This is not legal with relative ordering. See section 8.2.2 2c of the Servlet specification for details. Consider using absolute ordering. adm_1 | at org.apache.tomcat.util.descriptor.web.WebXml.orderWebFragments(WebXml.java:2205) adm_1 | at org.apache.tomcat.util.descriptor.web.WebX..