본문 바로가기

Dev.BackEnd14

[Java 초급] 자바 표준 라이브러리 소개 개념개발자들이 프로그래밍할 때 산술 기능, 출력 기능, 통신 기능과 같이 자주 사용되는 필수 기능들을 직접 구현하지 않도록 기본으로 제공되는 라이브러리다.Java 개발 위해 JDK를 설치하면 포함되어 있다. 표준 라이브러리 종류java.lang : 객체, 클래스, 시스템, 스레드, 예외 처리 등과 같은 핵심 기능을 포함한다. 이 패키지는 모든 Java 애플리케이션에서 자동으로 import 된다.java.util : 컬렉션 프레임워크를 포함하여 날짜와 시간 처리, 이벤트 모델, 난수 생성, 기본 유틸리티 클래스 등 다양한 유틸리티 클래스와 인터페이스를 제공한다.java.io : 입력과 출력(I/O) 기능을 담당하며, 파일 읽기와 쓰기, 데이터 스트림 처리 등을 위한 클래스와 인터페이스를 포함한다.java... 2024. 5. 14.
[Java 초급] final 키워드 개념final은 변수, 메서드, 클래스의 값을 변경할 수 없게 만든다.한마디로 낙장불입!적절한 위치에 final을 사용하여 코드 작성 의도를 명확히 하고, 의도하지 않은 변화로부터 코드를 보호하는데 도움을 준다.변수, 메서드, 클래스 중 어떤 곳에 사용하느냐에 따라 바꿀 수 없는 제약사항이 다르게 적용되기 때문에, 아래 내용을 통해 한번 자세히 알아보자! 변수(variable)에서 final지역변수(local)public static void main(String[] args) { // 지역변수 final String superpil = "hello"; superpil = "world"; // 컴파일 에러}superpil 변수를 선언하는 동시에 “hello”를 초기화했다.다음 "world"를 재할당.. 2024. 5. 9.
[Webflux] Chatting App Chapter1 (Vue + Rsocket) Introduction 이전 글([WebFlux] RSocket Basic)에서 WebFlux에서 RSocket 기초 사용법을 알아보았다. 이번에는 WebFlux + RSocket를 이용한 간단한 Chatting App을 구현해보자. 기본적인 기술 스택은 Server는 WebFlux, Front는 Vue로 구현한다. 아직 RSocket과 WebFlux를 공부하고 있는 단계라 깊은 지식을 가진 상태는 아니지만 지금까지 공부한 내용을 공유하고 싶어 이번 글을 작성한다. [Webflux] RSocket Basic Introduction 어렴풋 기억을 되살려 보면 RSocket과 첫 만남은 Stack Overflow에서 시작되었다. Java로(정확하게 말하면 Spring Boot)로 채팅 서버를 구축하기 위한 .. 2022. 4. 10.
[Webflux] RSocket Basic Introduction 어렴풋 기억을 되살려 보면 RSocket과 첫 만남은 Stack Overflow에서 시작되었다. Java로(정확하게 말하면 Spring Boot)로 채팅 서버를 구축하기 위한 기술 스택을 찾던 중 우아한 형제들 기술 블로그를 보게 되었다. 역시나 우아한 형제들은 내가 지금까지 듣도 보도 못한 기술들을 나열했다. 그중 Spring Webflux가 핵심 키워드로 판단하고 구글링을 오지게 했다. (진짜 정말 오지게 했다.😶🤤😐) 오지게 한 결과 Spring Webflux로 Websocket을 사용한 채팅 서버를 구축한 몇몇의 예제를 봤고 따라 해 봤지만 Webflux의 프로그래밍 방식이 익숙지 않아 삽질의 연속이었다. 지속적인 삽질로 배추를 세는 단위인 “포기”를 선언하려다 Stack .. 2022. 4. 3.
[디자인 패턴] Singleton Pattern 시작하기 이번 프로젝트를 시작하면서 서버에서 서버(server to server)로 데이터를 주고받아 처리하는 작업이 필요했다. 특별히 인증서버를 두지않고 요청할 서버에 토큰을 받아 인증받는 정책이었다. 해당 서버에서 토큰을 받기 위해 계정 정보, 도메인 정보와 같은 필수 정보들을 db에서 한 번만 조회 후 변수에 담아 재사용하고 싶었다. 처음에는 단순하게 static에 담아 재사용 생각을 했는데 문득 싱글톤 패턴이 생각나서 지금 같은 경우에 적용하기 좋은지 생각하게 되었다. 예전에 가볍게 스쳐 지나가듯 공부를 해서 이번에 제대로 알아보려 한다. 개념 싱글톤은 이름 그대로 객체(인스턴스)를 한 개만 생성하는 패턴이다. 즉, 유일무이 하게 단 하나의 객체 생성해서 모두가 공용으로 사용한다. 굳이…!? 왜 .. 2022. 3. 27.
[Spring Boot] Jackson 기본 개념과 LocalDateTime변환 이슈 개념 Jackson을 공부하기 앞서 기본적인 용어를 알아보자. 직렬화 객체를 문자열로 변환하는 과정 역직렬화 반대로 문자열에서 객체를 변환하는 과정 Jackson은 위에서 언급한 직렬화, 역직렬화를 도와주는 자바 라이브러리다. Jackson이 객체를 문자열로 변환해서 응답해주면 응답받은 곳은 문자열의 형태가 Json포맷을 하고 있어 해당 문자열을 받은 쪽은 Json으로 파싱이 가능한 것이다. 예제에 앞서 spring boot로 프로젝트를 생성하자. 다행스럽게 spring boot의 경우 Jackson라이브러리를 기본으로 제공한다. 즉 dependency를 따로 주입할 필요가 없다. (spring boot버전 따라 다를 수 it다!) 예제 Object to Json 기초 예제 자바 객체에서 Json포맷 형.. 2022. 3. 21.
[디자인 패턴] Observer Pattern 시작하기 간간이 패턴 공부를 했지만 Observer패턴은 처음 들어봤다.😂 채팅 서버를 한번 구축해 보고 싶다는 생각에 서치하던 중 Spring Webflux, RxJava를 접하게 되었고 Webflux로 채팅서버를 만들어보면 좋겠다는 생각에 공식문서나 기술문서를 이리저리 찾아봤는데 "발행자, 구독자"라는 키워드가 무진장 나오면서 Observer패턴이 등장했다. 걍 무시하고 Webflux지식을 줍줍 할랬는데..... 도통 뭔말인지 이해가 되질 않아 기초인 Observer패턴을 공부하게 되었다. 패턴을 공부한다고 Webflux를 자세히 알지는 못하겠지만 "어느정도 플로우는 알겠지!"라는 느낌적인 느낌으로 공부해 본다. 레고레고! 개념 먼저 위키백과에서 설명하는 옵저버 패턴의 개념을 읽어보자. (습관처럼 위.. 2022. 3. 13.
템플릿 조각(th:fragment, th:insert, th:replace) 개념 template의 사전적 의미는 견본, 형판이다. 의미를 HTML에 적용하면 특정 영역을 견본처럼 때어낸 독립적인 형태를 말하며, 이런 형태는 견본처럼 여기저기서 사용할 수 있게 한다. 너무 거창하게 설명하는 것 같다....... 아래 그림을 보자. Page1과 Page2에서 공통으로 사용하는 Header영역을 템플릿 조각이다. 이렇게 템플릿 조각을 사용하면 중복되는 코드를 막을 수 있고 Header에 수정사항이 발생해도 공통으로 사용하기 때문에 Page1과 Page2도 동일하게 수정사항이 반영된다. 이제 예제를 보면서 사용방법을 알아보자! 예제 디렉토리 구조 Controller @Controller @RequestMapping("/main") public class MainController { .. 2021. 12. 29.
[Spring Boot] Rest API 에 Spring Security Form 로그인 적용하기 Rest Api개발 시 Spring Security를 Jwt token방식으로 사용해 왔었다. token방식을 사용하게 되면 신경써야할 사항들이 생긴다. 그래서 Rest Api에 Spring Security Form방식으로 사용할 수 있는 방법을 공부 해보자! 환경 셋팅 및 프로젝트 생성 Spring Boot 2.6.2 Java 1.8 Spring Security 5.6.1 Mysql Mybatis 우선, 기본적인 Spring Boot 프로젝트를 생성한다. 이때 Spring Web, Spring Security, Lombok, DevTool, Mysql connector와 같이 기본적인 dependency와 함께 프로젝트를 만든다. org.springframework.boot spring-boot-sta.. 2021. 12. 27.
[Spring Boot] 파일 다운로드 - 서버에서 다운 시작하기 파일 다운받기 구현 방법은 대표적으로 2가지가 있는 것 같다. 하나는 Front에서 Blob로 변환 시켜 a태그의 download속성을 사용해 구현하는 방법. 하나는 Back에서 byte로 파일을 읽어 응답하면 Front에서 바로 다운받게 하는 방법. 처음에 말한 Front에서 Blob로 변환시켜 다운받는 방법은 IE, Edge, Firefox, Chrome, Safari등 일부 버전에서 지원하지 않는다. 브라우저 지원에 영향을 받지 않는다면 download속성을 사용해 Front에서 작업을 해도 상관 없지만 브라우저 신경을 쓰고 싶지 않다면 Back에서 기능을 구현하는게 좋을 것 같다. Front 파일 다운로드 👉 파일 다운로드 예제를 간단하게 하기 위해 하드코딩으로 파일 다운로드 주소를 hr.. 2021. 8. 16.
Express 시작하기 Express.js, 또는 간단히 익스프레스(Express)는 Node.js를 위한 웹 프레임워크의 하나로, MIT 허가서로 라이선스되는 자유-오픈 소스 소프트웨어로 출시되었다. 웹 애플리케이션, API 개발을 위해 설계되었다. Node.js의 사실상의 표준 서버 프레임워크로 불리고 있다. -위키백과- 역시 위키. 간단 명료하지만 핵심적인 설명! Express의 기본개념은 위키설명으로 대신하고 Express로 프로젝트 생성하는 방법을 찾아봤다. 이래저래 구글링을 통해 Express로 프로젝트를 구성하는 방법을 찾아보니 대표적으로 2가지로 나뉜다. Express를 설치하고 한땀한땀 필요한 구성을 직접 잡아가는 방법 express-generator를 사용해 프로젝트 생성하는 방법 express-generat.. 2021. 5. 2.
[Java 초급] Overloading - 오버로딩 OverloadingOverload의 사전적 의미는 "초과 적재", "과부하"이다.전혀 느낌이 오지 않는다. 무엇을 쌓는다는 건가?! Overloading을 한마디로 정의하자면!할 수 없다. 어휘력 부족......😿 그러니까. 그. 뭐냐. Um... Java에 class가 있다. class에 메소드를 만드는데 메소드 이름을 중복으로 여러 개 만든다.원래 메소드 이름이 중복되면 에러가 발생하지만 약간의 규칙을 준수하여 만들면 에러가 발생하지 않고 만들 수 있다. 이것을 Overloading이라 한다. 여기서 의문이 든다.왜 같은 이름의 메소드를 굳이! 여러 개 만들까?! Overloading 예제메소드 Overloadingpublic class Overloading { public int sumMeth.. 2020. 8. 25.
[Spring Boot] @Vaild Annotation - 유효성 검사 유효성 검사 유효성 검사란, 한 문장으로 정의하자면 "데이터가 요구하는 형식(or 양식)에 맞는지 체크하는 검사를 뜻 한다." 가령, 회원가입 시 ID를 이메일로 가입할 경우 사용자가 작성한 값이 이메일 형식인지 아닌지 체크하는 것이다. 사용자가 vaild@naver.com으로 요청하면 상관없지만 "@" 없이 요상한 데이터로 요청한다면 걸러내서 가입을 못 하게 해야 한다. (당연히🥕 해당 이메일이 진짜 있는지 없는지 여부까지는 체크하지 않음!! JUST 형식 여부만 첵! 첵!) 그럼! 유효성 검사는 언제 할까?! 프론트와 백엔드 모두 검사를 해야 한다 WHY?라고 반문하면 아~주 디테일하게 대답할 수 없지만... 두 번 검사를 하니깐 안전하고... 확실하고.. 안전하니깐 보안에 좋을 것 같고... 등등 .. 2020. 8. 23.
[Mybatis] Invalid bound statement (not found) 먼저! 에러 원인을 직.독.직.해 하자면 "잘못된 바인딩 문" 라고 파나고가 해석해준다. 흠.. 잘못된 바인딩이라... 뭔 말?! 바로 구글링 해보니 "Mapper인터페이스 와 Mapper xml파일에 오타로 인한 경로 설정이 잘못된 경우 발생한다"라고 설명한다. 원인 Mapper Xml파일의 namespace경로 설정 문제 DAO와 Xml파일을 연결하기 위해 DAO에는 @Mapper어노테이션을 선언하고 Xml파일에는 namespace경로를 작성한다. 이때 namespace에 작성한 DAO경로가 틀린 경우 "Invalid bound statement (not found)" 에러가 발생한다. import org.apache.ibatis.annotations.Mapper; @Mapper public inte.. 2020. 8. 21.