스프링을 사용하면서 싱글톤 패턴이든, 스프링 같은 싱글톤 컨테이너를 사용하든, 객체 인스턴스를 하나만 생성해서 공유하는 싱글톤 방식은 여러 클라이언트가 하나의 같은 객체 인스턴스를 공유하기 때문에 싱글톤 객체는 상태를 유지(stateful)하게 설계하면 안된다.무상태(stateless)로 설계?무상태 설계특정 클라이언트에 의존적인 필드가 있으면 안된다.특정 클라이언트가 값을 변경할 수 있으면 안된다.가급적 읽기만 가능해야 한다.필드 대신에 자바에서 공유되지 않는 지역변수 파라미터, ThreadLocal 등을 사용해야 한다.스프링 빈의 필드에 공유 값을 설정하면 정말 큰 장애가 발생할 수 있다.상태를 유지할 경우 발생하는 문제점 예시public class StatefulService { private..
개발공부
이 글은 김영한님의 강의를 기반으로 기록하기 위한 글임. SOLID 란 무엇일까? SRP: 단일 책임 원칙 (single responsibility principle) ОСР: 개방-폐쇄 원칙 (Open/closed principle) LSP: 리스코프 치환 원칙 (Liskov substitution principle) ISP: 인터페이스 분리 원칙 (Interface segregation principle) DIP: 의존관계 역전 원칙 (Dependency inversion principle) SRP 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. 클 수도 있고, 작을 수도 있다. 문맥과 상황에 따라 다르다. 중요한 기준은 변경이다. 변경이 있을 때 파급 효과..

좋은 객체지향프로그래밍이란? 해당 글은 김영한강사님의 스프링 핵심 원리 - 기본편 강의를 들으면서 정리를 하기 위해 블로그에 작성을 하는 글임을 밝힌다. 좋은 객체 지향 프로그래밍이란 인터페이스의 구현체가 바뀌어도, 클라이언트는 여전히 그 동작을 하는 것이 가능하도록 하는 것을 말한다. 즉, 어떤 인터페이스에 대한 어떠한 구현체도 넣을 수 있다는 점에서 다형성을 보장한다. 즉 다시 말해 인터페이스의 내부 구조와는 상관없이 클라이언트는 인터페이스만 이해하고 있다면 그 구현체랑은 독립적이라는 이야기가 되겠다. 말이 조금 어려워졌는데 이를 사진으로 이해해보자. 위 그림은 대표적인 객체지향프로그래밍의 예시인 운전자-자동차의 예시이다. 자동차라는 인터페이스에 K3, 아반떼, 테슬라 모델3중 어느 것이 들어와도 운..

안녕하세요. 환타입니다. 이번 포스팅은 IntelliJ에서 GitHub 연동하는 것을 알아보려 합니다. 1. IntelliJ Github 연동 설정 1) Git 실행 설정 - File -> Settings를 들어갑니다. - 설치한 git의 실행파일의 경로를 지정합니다. (git이 없다면 설치를 하셔야 해요.) 2) GitHub 계정 연동 - 생성해놓은 GitHub 계정과 연동해주세요. 2. IntelliJ Github 연동 프로젝트명으로 Repository 생성해서 Github 연동 - Version control -> Share Project On -> GitHub - 최초 Commit - 설정한 프로젝트 명과 동일하게 Github와 연동된 것을 확인하실 수 있습니다.
JSON JSON(JavaScript Object Notation)과 XML(eXtensible Markup Language)은 둘 다 구조화된 데이터를 표현하고 전송하기 위한 데이터 형식입니다. 그 중에서 JSON에 대해서 알아보려고 합니다. JSON은 경량의 데이터 교환 형식으로, 텍스트 기반의 구조화된 데이터를 표현합니다. JSON은 가독성이 좋고, 다양한 프로그래밍 언어와 호환되기 때문에 널리 사용되고 있습니다. JSON 데이터 형식의 구조는 다음과 같습니다. 1. 객체 (Object) : JSON 객체는 중괄호 {}로 묶인 키-값 쌍의 집합입니다. 키는 문자열이고, 값은 JSON 데이터 형식 중 하나가 될 수 있습니다. 키와 값은 콜론(:)으로 구분되며, 여러 개의 키-값 쌍은 쉼표(,)로 구분..
https://9js7.tistory.com/187 SpringBoot + HTML 한글 깨짐 현상 개발환경 IntelliJ SpringBoot 2.6.4 HTML5 MariaDB 10.5 상황 간단히 프로젝트를 하는 상황에서 간단한 테스트를 하기 위해서 HTML5환경에서 DB에 값을 넘겨주게 되었다. 원인과 해결은 매우 단순했다. 그저 he 9js7.tistory.com 이 글에서 을 명시해 주지 않아서 한글이 깨졌던 오류가 발생했다. 그러다 문득 왜 을 명시해 주어야 하는지 궁금해져 이 글을 작성하게 되었다. 인코딩 우선 인코딩에 대해서 알아볼 필요가 있다고 생각한다. 우리가 흔히 인코딩이라는 단어를 접해보고, 또 많이 사용해봤을텐데 정확한 의미는 생각해보지 않았던 기억이 있다. 우선 인코딩이란 컴퓨..
개발환경 IntelliJ SpringBoot 2.6.4 HTML5 MariaDB 10.5 상황 간단히 프로젝트를 하는 상황에서 간단한 테스트를 하기 위해서 HTML5환경에서 DB에 값을 넘겨주게 되었다. 원인과 해결은 매우 단순했다. 그저 head 부분에 HTML 삽입 미리보기할 수 없는 소스 단순히 이 구문을 넣어주지 않아서 발생했던 문제였다.

개발환경 SpringBoot 2.78 Java 11 Oracle 11g Maven Repository에서 ojdbc6를 추가하기 위해서 찾아본 결과 아래처럼 나온다. Note를 보면 repository url을 제시하는데, 이를 repositories에 추가한다. 또한 Gradle 7.*버전 이후로는 http 형식이기에 한 줄을 더 추가해주어야 한다. repositories maven { url "http://www.datanucleus.org/downloads/maven2/" allowInsecureProtocol = true } Dependencies // https://mvnrepository.com/artifact/oracle/ojdbc6 implementation group: 'oracle', ..