본문 바로가기

언어와 프레임워크16

Go 입문 계기와 매력 Go.. 모던한 언어이며 병렬성(성능)과 가독성, 단순함을 챙겼다 들었습니다. 구글 내의 다운로드 서버나 여러 스트리밍 회사에서 Go의 성능을 보고 채택하였다하여 JVM계열 언어보다 성능적으로 뛰어난 언어를 한 번 배워보고 싶었습니다. package main import "fmt" func main() { fmt.Println("Hello, World!") } 2023. 12. 22.
빠르게 살펴보는 코틀린 문법 클래스 생성자 constructor 키워드 class Person constructor(name: String, age: Int) {}클래스 선언부에 적지 안하도 알아서 생성해준다. 기본 생성자의 인자가 외부 주입이거나, 여러개가 필요할 땐 내부에서 선언한다. class Person() { // 기본 생성자의 인자 없는 경우 constructor(name: String, age: Int): this() } class Person(name: String) { // 기본 생성자의 인자가 있는 경우 constructor(name: String, age: Int): this() }기본 생성자 외 생성자는 this()를 꼭 호출해야한다 클래스 생성할 때 new 키워드 사용하지 않는다. 디폴트 생성자에 기본값 넣기.. 2023. 9. 25.
nginx SSL redirect 리버스 프록시 conf 설정 (Amazon linux2, Springboot 2.7.4) 상황준비중간 오류 상황 AWS ec2 Amazon Linux2 환경에서 java, springboot 프로그램을 운영 중에 있습니다. 서비스 접근 시 안전을 위하여 SSL 443 포트 접근을 가능하도록 하려합니다. (80 접근 시 443 redirection) 자동화 배포를 위하여 스크립트로 만들 수 있게 명령어들을 구성하였습니다. 준비 Step 1. nginx에 include 될 conf 파일을 작성합니다. (SSL 포트 접근을 위한 부분은 마지막에 자동확장 됩니다.) 리눅스 기준 /ect/nginx/conf.d/파일명.conf (확장자명 필수)server { listen 80; server_name 서버 도메인 입력; #ex kupica.kr location / { proxy_pass https://.. 2023. 8. 1.
[Java] lazy evaluation(short circuit, loop fusion), Stream API lazy evaluation이란 어느 조건이 이미 달성하여 생략해도 상관없는 그 다음 행위를 생략하는 일종의 최적화 기능이라 할 수 있습니다. 비교 연산자에서의 short circuit이 그 예가 되겠습니다. 어느 조건에서 나머지 조건에 상관없이 그 결과가 정해졌을때 나머지 조건에 대한 연산은 실행하지 않는 것을 말합니다. static boolean executeFlag = false; public static void main(String[] args) { Supplier returnTrue = () -> true; Supplier returnFalse = () -> false; Supplier updateFlag = () -> { executeFlag = true; return true; }; if .. 2023. 7. 26.
[Java] effectively final, lambda lambda식에서는 외부지역변수를 사용할땐 final이거나 effectively final 해야한다. lambda식도 함수이니 실행되는 함수와 외부지역변수를 가진 함수와 다른 쓰레드에서 동작할 가능성이 있다. 이 때 두 쓰레드 사이에 외부지역변수에 대해 완벽하게 sync를 잡아줄 방법이 없다. lambda식 입력이 같다면 그 결과도 같아야만한다.(순수함수) 일단 둘 사이의 쓰레드가 다를 때 외부지역변수의 데이터를 가진 쓰레드가 먼저 끝나 데이터가 사라질 수 있다. 그렇기에 lambda식에서는 변수를 복사하여 사용한다. (람다 캡쳐링) (클래스 변수, 인스턴스 변수는 공유 자원이니 접근 가능) 즉, 멀티쓰레딩 환경에서 정상적인 결과를 보장하기 힘들어 외부지역변수를 복사하여 사용한다. 그리고 이 복사한 값에.. 2023. 7. 25.
[Springboot] 개발환경과 테스트환경 각각 다르게 설정하기 (예시 DB) Intellij 2022.01.03, java 8, springboot 2.7.4, gradle 환경에서 작업하였습니다. 개요 spring mvc 환경에서 개발을 하다보면 실제 기능을 위한 작업과 기능을 테스트하기 위한 작업을 구분하여야 할 때가 있습니다. 저의 경우 실제 운영하는데에선 MariaDB가 사용되었고 테스트 환경에서는 In memory DB인 H2 데이터베이스를 사용하였습니다. 저는 두 개발환경을 두 개의 application.yml 파일을 둬서 관리하였습니다. https://unagi-zoso.tistory.com/219 [Spring] Profile을 통해 다양한 application.yml 설정 운용하기 개요 예시 테스트 개요 서비스를 만들다보면 local, develop, produc.. 2023. 3. 3.
[Spring] JUnit5와 생성자 DI 사건 발단 JUnit5 단위테스트 작성 중 기존 스프링 프레임워크에서 DI하듯 private final로 변수를 생성하고 생성자를 통해 오브젝트를 주입 받았습니다. 하지만 DI가 제대로 이뤄지지 않고 NullException만 자꾸 일어나는 것이 였습니다. 해결 방안 디버깅을 통해 어느 위치에서 문제가 있는지 파악하려하였는데 어느 곳에 브레이크 포인터를 설정하여도 브레이크가 잡히지 않았습니다. 갸우뚱하다가 프로세스가 실행하면서 생기는 exception 같으니 DI에서의 문제가 있는건 아닌가? 생각하여 인터넷에서 알아봤습니다. JUnit5환경에서는 기존 Spring에서와는 달리 DI를 @Autowired 어노테이션을 통해서 인식하고 주입이 이뤄진다고 합니다. 그래서 기존 생성자 주입 방식에서 @Autowi.. 2022. 9. 30.
[Spring] Spring Security와 h2-console 403 에러 개요 코드 개요 Spring Security와 h2-console 사용 시 SecurityConfig에서 따로 설정을 안하면 h2-console로 접속하려는 순간 403 에러가 나타납니다. 코드 http.antMatcher("/**") .authorizeRequests() .antMatchers("/", "/me", "/h2-console/**", "/login/**", "/js/**", "/css/**", "/image/**", "/fonts/**", "/favicon.ico").permitAll() .and().headers().frameOptions().sameOrigin() .and().csrf().disable() ; 긴 글 읽어주셔서 감사합니다. 부족한 점이 있다면 부디 알려주시면 감사하겠습니다. 2022. 9. 30.