스프링을 사용하면서 싱글톤 패턴이든, 스프링 같은 싱글톤 컨테이너를 사용하든, 객체 인스턴스를 하나만 생성해서 공유하는 싱글톤 방식은 여러 클라이언트가 하나의 같은 객체 인스턴스를 공유하기 때문에 싱글톤 객체는 상태를 유지(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중 어느 것이 들어와도 운..
이 글은 내가 까먹기 전에 올려야겠다고 생각해서 쓰는 글이다.. (긴 글 주의) * 나도 다른 분들 블로그, 후기들을 보면서 참조한 것이 많았고 많이 도움을 받았기에 이 글이 언젠가 다른 분들에게 도움이 될 수 있지 않을까 하는 마음에 작성한다. * 그리고 나는 연봉이 3500이 넘는데, 중기청을 실행했다. 이것은 아래에서 자세히 서술하겠다. 물론 아직 중기청 대출이 실행되지도 않았고, 신청만 해두었을 뿐이지만 대부분의 사람들이 계약 + 중기청100%에 대해서 많은 고민이 있을 것이라 판단했고, 내년 1월부터는 상품이 없어진다고 하여 호다닥 적어본다. " SH 매물 당첨 " 우선 나는 회사 동료들의 추천으로 SH 장기미임대전세에 처음 넣었고 .. 정말 운이 좋게도 당첨됐다. 사람 일은 어떻게 될지 모른다..
강의 하나를 완강하고 (사실 예전 강의라서 당장 써먹으려니 힘들었다..) 기존 Vue로 만들었다가 잠적 중단 시켜뒀던 프로젝트를 다시 시작해보려고 했다.. 하지만 막상 쓰려니 강의에서 썼던 setState가 아니라 useState를 사용하라고 한다.. 요즘은 setState는 옛날 거라면서 .. 이해했다. 그래서 useState를 쓰려고 예제를 보고 이걸 바로 적용시키려고 하니 내가 머리가 받아주질 않는다. 아니 도대체 어떻게 동작하는 거고, 어떻게 쓰는 건데? 그래서 이것에 대해 이야기를 하며 내 스스로가 좀 배우고 깨닫길 바라는 마음으로 글을 작성하려고 한다. useState? useState는 배열을 return해주는 함수이다. 예제로는 const [state, setState] = useState..

Objects are not valid as a React child ~ If you meant to render a collection of children, use an array instead. 해결 방법 문제 상황 fetch를 이용하여 api를 호출, 서버에서 값을 받아와서 이 값을 페이지에 출력하려 했다. 하지만 정상적으로 출력되지 않고 아래와 같은 시뻘건 에러를 뱉는다. 원인 JSON 타입의 Object를 그대로 렌더링 하려고 하니 에러를 뱉는 것이다. 해결방법 나 같은 경우에는 JSON.stringify를 이용하여 해당 객체를 출력했다. const LoginPage:React.FC = () => { const [test, setTest] = useState([]); const [idValue..

안녕하세요. 환타입니다. 이번 포스팅은 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 데이터 형식 중 하나가 될 수 있습니다. 키와 값은 콜론(:)으로 구분되며, 여러 개의 키-값 쌍은 쉼표(,)로 구분..