전체 글

if문 중괄호를 생략하면?if문을 작성할 때, 중괄호{} 블록 내에 실행문이 하나밖에 없다면 중괄호를 생략할 수 있다.ealry return이나 단순 프린트(혹은 로깅)를 할 때 유용하게 사용되곤 하는데, 제대로 알지 못하고 사용하면 버그의 원인이 될 수 있다. boolean isTrue = true;// good caseif (isTrue) System.out.print("HELLO WORLD");// bad caseif (!isTrue) System.out.println("It's false!"); System.out.println("BYE WORLD"); 첫번째 케이스와 같이 if문에 실행문이 하나인 경우 "HELLO WORLD"를 출력하게 된다.하지만 두번째 케이스의 경우 의도와 다르게 "B..
부호/증감 연산자부호 연산자연산식설명+피연산자피연산자의 부호 유지-피연산자피연산자의 부호 변경 정수 타입(byte, short, int) 연산의 결과는 int 타입이다. 부호를 변경하는 것도 연산이므로 int 타입 변수에 대입해야한다. 증감 연산자연산식설명++피연산자피연산자의 값을 1 증가시킴--피연산자피연산자의 값을 1 감소시킴피연산자++다른 연산을 수행한 후에 피연산자의 값을 1 증가시킴피연산자--다른 연산을 수행한 후에 피연산자의 값을 1 감소시킴  ❓for문 증감연산자는 왜 뒤에 ++이 붙을까?for문의 증감식은 블록 실행 후 루프가 "다시 조건식으로 돌아가기 전에" i값을 증감 시키는 역할을 한다.즉, 블록 실행 후 i를 증감시켜 다음 루프를 준비하는 것이다...만 for문 증감식에서 후위(i+..
변수 선언변수하나의 값을 저장할 수 있는 메모리 번지에 붙여진 이름자바의 변수는 처음에 선언된 타입 형태로만 저장할 수 있다. 변수명 규칙첫번째 글자는 문자여야한다. 특수문자는 '$', '_' 만 포함할 수 있다.중간부터는 숫자 및 허용된 특수문자를 사용할 수 있다.첫 문자는 소문자로 시작하되, CamelCase로 작성한다. 변수 선언과 초기화변수 선언저장되는 값의 타입과 이름만 결정한다. 메모리에는 할당되지 않는 상태int num; 변수 초기화변수에 최초로 값을 대입한다. 변수를 선언함과 동시에 대입할 수 있다.초기화 하지 않은 변수를 연산식에 대입할 경우 컴파일 에러가 발생한다.int num; // 변수 선언int value = 10; // 변수 초기화int result = num + value; ..
프로그래밍 언어와 자바Java의 특징모든 운영체제에서 실행 가능JVM(Java Virtual Machine) 위에서 실행되는 자바는 OS와 무관하게 모든 플랫폼에서 동작한다.객체 지향 프로그래밍(Object-Oriented Programming, OOP)메모리 자동 정리자바는 GC(Garbage Collection)가 메모리를 자동으로 관리해준다멀티스레드 지원무료 라이브러리 풍부 다른 언어와의 비교대표적으로 많이 사용되는 C++, Python과 비교해보자비교 항목JavaC++Python실행 환경JVM 위에서 실행OS에서 직접 컴파일하여 실행인터프리터 기반메모리 관리자동수동자동속도중간빠름느림난이도중간상대적으로 복잡쉬움주요 사용 분야기업용 백엔드, 모바일(Android), 금융 시스템 등게임, 임베디스 시스..
· Spring boot
들어가며 일반적으로 Spring boot에서 Get방식(혹은 쿼리파라미터가 필요한) 요청을 받을 때 사용되는 어노테이션에는 @RequestParam, @PathVariable, @ModelAttribute가 있다. 파라미터의 개수가 적은 경우에는 앞의 두개 어노테이션으로 충분하지만 파라미터가 많아질 수록 객체로 요청을 받는게 가독성 측면에도 관리 측면에도 수월해지기 때문에 @ModelAttribute를 사용한다. 종종 @ModelAttribute를 사용하면서 헷갈리거나 잊어버리는 개념이 있어 이번 포스팅에서는 @ModelAttribute 어노테이션에 대해 공부해보고자 한다! @ModelAttribute 사용 이유 요청을 받을 때 다음과 같이 파라미터의 개수가 적다면 @RequestParam 어노테이션으로..
· Spring boot
들어가며 WebClient는 RestTemplate의 대안으로서 급부상된 WebFlux의 라이브러리이다. Spring MVC에서도 지원하는 WebClient는 RestTemplate과 비교했을 때 가장 큰 장점이 `비동기 통신을 지원한다`는 점이 아닐까 싶다. 물론 그 외에도 함수형 프로그래밍 스타일을 지원한다는 점, 다양한 설정과 에러처리를 지원한다는 점 등도 장점으로 꼽을 수 있겠다. WebClient의 최대 장점인 비동기 통신을 지금까지 사용하기 어렵고 쓸 데가 없다는 이유만으로 동기 방식을 고수해왔었는데 이번 회사 프로젝트를 하면서 비동기 통신이 필요해진 시점이 생겼다. 이번 기회에 WebClient의 비동기 통신을 구현해보았고 이번 포스팅의 주제로 삼아보고자 한다. 처음 비동기 통신을 구현해보았..
· Study/Etc
들어가며 이미 많은 개발자들이 알고, 사용해보고 있을 ChatGPT. Open AI에서 만든 ChatGPT는 API로도 사용이 가능하다. 모델마다 토큰 당 가격에 일부 차이가 있지만 단순한 프로젝트에 적용하기에는 부담되는 비용이 아니기 때문에 사이드프로젝트에 도입을 해보면 좋을 것 같다는 생각이 들어 간단하게 사용법을 작성해보고자 한다. 자세한 내용은 OpenAI의 ChatGPT API Docs를 참고하도록 하자 ChatGPT API Docs OpenAI Platform Explore developer resources, tutorials, API docs, and dynamic examples to get the most out of OpenAI's platform. platform.openai.com..
· Spring boot
들어가며 회사에서 개발 중인 서비스가 통신하기 위한 서버가 특정 서버에서만 접근 가능한 상황이었다. 백그라운드에서 동작하는 (유저가 접근하지 않아도 되는) 어플리케이션은 그 특정 서버에 서비스를 띄워서 서로 통신이 가능한 방식을 사용하고 있었지만 개발 중인 서비스가 동작 중인 서버는 별도의 서버로 분리가 되어있었고, 이 서버는 정책상 특정 서버에서 인바운드가 막혀있는 상태였다. 조금 복잡한데 아무튼 개발 중 서비스 -> 타겟 서버로의 직접 접근이 안된다는 말이다. 이 문제를 해결하기 위해서는 타겟 서버로의 접속을 우회하는 방식을 사용해야하는데 이걸 SSH 터널링이라고 한다. 이번에는 SSH 터널링의 개념과 필요성, 구현 예시에 대해 작성해보고자 한다. SSH (Secure Shell) 시큐어 셸(Secu..
· Spring boot
들어가며 2023.08.25 - [Study/Spring boot] - [Spring boot] WebClient 사용해보기 2-1 이전글에서는 내가 어떻게 웹클라이언트를 사용하고 있는 지에 대해 간단하게 설명했다. 이번 글에서는 코드를 하나씩 보면서 내가 짠 코드가 어떻게 작동하는 지에 대해 설명해보고자 한다. 지난 글에서 위의 그림과 같이 메서드 체이닝 방식을 직접 구현했었다. 위의 그림 순서에 따라서 차근차근 코드를 보자. ApiWebClientBuilder @Component @RequiredArgsConstructor public class ApiWebClientBuilder { private final WebClient.Builder webClientBuilder; // 체이닝 시작점 publ..
· Spring boot
들어가며 무려 1년도 더 된 이전글이 항상 내 블로그 인기글 1위인걸 볼 때마다 마음에 걸렸다. 막 개발 공부하기 시작했을 즈음 webClient에 대한 자료가 별로 없어서 정리할 겸 작성했던 글인데 관련 키워드로 검색하면 저 글이 뜨는 걸 보고... 새롭게 알게된 내용들을 조금 더 추가하고, 현재는 어떻게 사용하고 있는 지에 대해 정리를 해보고자 한다. 기본 개념이나 RestTemplate과의 차이점 등등은 공식문서나 구글에 검색하면 깔끔하게 정리된 자료가 많기에 넘어가기로 하고, 내가 사용하면서 알게 된 개념들만 적어내려가보겠다! WebClient 최종적으로 완성될 구조는 위와 같다. 각 step 이 뭐고 어떻게 사용하는 지는 천천히 설명하기로 하겠다. 이 구조를 사용하면 아래와 같이 코드를 사용할 ..