전체 글 225

Http통신 데이터 형식(바이너리, base64) form-data사용하는이유

시작처음시작은 하나의 의문에서 시작되었다. 왜 JSON 형태의 객체를 주고받을때 문자열 상태 '{ "a" : "hi" }' 와 같은 형태로 변경되어서 보내거나 받는걸까? JSON이면 우리가 content-type에 지정했듯이 application/json 이라고 명시되어있는데 왜 저렇게 문자열로 주고받아야하고 저걸 불필요하게 직렬화 하거나 역직렬화/파싱 처리를 해야할까? 라는 의문이들었다. 데이터 통신의 형태리서치한 결과 http를 통해 데이터를 보낼수있는 형태는 바이너리 와 문자열(텍스트)로만 가능하다는것이다. 물론 다른 프로토콜을 사용하거나 타입이나 그런건 설정으로 바꿀수있다곤하지만 결국에는 바이너리 or 문자열 이다. 여기서 혼동되면 안되는부분이 header에 들어가는 content-type의 경우..

공부/CS 2024.10.16

싱글톤패턴, 멀티쓰레드 stateful 문제

Singleton Pattern을 사용하여 중복하여 new 인스턴스를 생성하지않고 단일 인스턴스를 활용하여, 서비스 이용시 새로운 인스턴스를 생성하는 비용보다 인스턴스 하나를 공유하도록 설계해야 효율적이고 낭비없는 서비스를 제공하게된다. 하지만 싱글톤 패턴을 적용하려다보면 DIP, OCP를 위반하게되고 별도의 세팅을 위한 public 사용못하도록 Private 생성자함수 생성, new 인스턴스 생성 등을 하는 번거로운 코드작업이 추가되는 등 안티패턴이 생겨 이점보단 단점이 생길수있다고 한다. 하지만 스프링의 경우 이러한 싱글톤패턴의 단점을 제거하고 좋은점을 이끌어내도록 하는데 스프링컨테이너, 스프링의 빈이 이것에 속한다. 먼저 3가지의 경우의 코드를 예시로 보여주겠다. 첫번째는 싱글톤적용없이 사용할때, ..

객체지향OOP, 도메인 구조(서비스, 레퍼지토리, 컨트롤러, 모델 )

현재 인프런 강의를 들으며 간단한 개인 기록 노트식으로 작성, 공부를 통해 배운것을 생각해내며 생각나는대로 정리하였고 중간중간 공부 레퍼런스 참고겸 넣는 방식으로 작성. 1. OOP Object -Oriented Programming : 객체지향 프로그래밍여러 패러다임이 있는데 객체지향 프로그램은 단위 객체로 나누고 객체간의 서로 상호작용하는 설계 방법이다. 객체는 클래스를 통해 구조를 가지는데 이때 속성과 메서드를 포함한 것이고 클래스는 어떠한 객체의 청사진의 설계도라고 생각하면된다.이 설계도를 통해 여러개 복사해서 만들어가는 것이고 이때 만들어진것이 new 키워드를 통해 생성되는 인스턴스이다. 클래스클래스는 단일로 존재할수도있지만 상속을 통해 부모 자식관계가 생겨날수있고 이를 상속 이라는 개념이다.부..

언어/자바 2024.06.26

패스트캠퍼스 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online

웹 개발자로 일을 하고 있는데 프론트엔드로서 경험과 지식은 있지만 백엔드에 대한 지식은 없었던 나는 계속해서 백엔드 영역도 공부해야겠다는 욕심과 갈망을 가지고있었다. Java로 시작해서 백엔드 모든 사이클을 다 경험할 수있는 강의는 없을까 찾던 중 그전에도 패스트캠퍼스를 들었는데 초격차 패키지로 모든걸 경험할 수 있는 강의를 찾게 되었다. 이에 대해 지금까지 들은 강의에 대한 후기를 작성하고자한다. 후기 먼저 Java에 대한 개념이 없던 나는 기초부터 공부를 시작해야했는데 한 번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 는 Java개념부터 차근차근 알려주어서 좋았다. 자바 기초를 잡아주는대만 무려 자바기초문법 5시간+ 객체지향 27시간 총32시간을 배우기때문에 자세히 배울수있다. 또한..

카테고리 없음 2023.12.03

Canvas를 이용한 animation(빗방울효과)

사용자의 컴퓨터마다 fps(hz)가 다르기떄문에 animate를 실행하여 1초마다 y값을 1씩 아래로 이동하게될경우 어떤 컴퓨터는 빠르고 어떤 컴퓨너튼 느리게 움직이게 되서 같은 유저 경험을 할수가없다. 이를 방지하기위해 아래 표처럼 interval과 delta, date를 이용하여 fps 값을 구하고 해당 delta값이 interval 보다 클때마다 동작하도록 구현한다. 아래의 표를 보며 fps에 따라 화면에 그려주는 밀도를 확인해보자. requestAnimationFrame 메서드를 사용하는것을 참고 해당 구현코드 class Particle { constructor(x, y, radius) { this.x = x; this.y = y; this.radius = radius; } draw() { // ..

추상클래스/템플릿 메서드, final 예약어

추상클래스는 상속을 위한 클래스이기때문에 만약 메서드를 구현했다고하더라도 인스턴스로 사용할 수 없다. 아래처럼 abstract을 붙인 클래스가 있다면 아래와 같이 new 를 통한 새로운 인스턴스 정의는 할수 없다. 추상 클레스 및 추상 메서드는 다른곳에서 쓸때 해당 메서드가 정의되어 사용해야한다. 만약 그러고 싶지 않다면 Hook 메서드를 만들어서 사용한다. 템플릿 메서드 추상 메서드나 구현된 메서드를 활용하여 코드의 흐름(시나리오)를 정의하는 메서드이다. final로 선언하여 하위 클래스에서 재정의 할 수 없게 한다. final 예약어 final 변수 : 값이 변경될 수 없는 상수 ex) final static final double PI = 3.14; final 메서드 : 하위 클래스에서 재정의 할 ..

언어/자바 2023.11.11