괴발개발 성장기
반응형

전체 글 219

[디자인패턴] 팩토리 메소드 패턴(Factory Method Pattern)

# 정의 객체 생성을 서브클래스에 위임하여 객체 생성과 사용을 분리하는 디자인 패턴 # 장점 1) 개방-폐쇄 원칙(OCP) 적용된다. 기존의 코드를 변경하지 않고 새로운 기능을 확장할 수 있다. 이렇게 개발하면 Product와 Concrete가 느슨하게 결합한다. 2) 결합도가 낮아진다. 3) 코드는 간결해지고 기존 코드가 복잡해지지 않는다. # 단점 1) 각자의 역할을 나누다 보면 클래스가 늘어나는 게 단점이다. # 예시 // Ship 인터페이스 type Ship interface { // 공통 동작을 정의 Color() string } type WhiteShip struct{} func (c WhiteShip) Color() string { return "color : white" } type Blo..

[디자인패턴] 싱글톤

# 싱글톤 개념 객체의 인스턴스를 한개만 생성되는 패턴 # 목적 1) 어떤 클래스에 오직 하나의 인스턴스만 존재 2) 하나만 존재하는 인스턴스에 전역(global) 접근 방법 제공 # 예시 게임의 설정 => 오직 하나만 존재한다. # 기본적으로 싱글톤 예시 - sync.Once를 사용하여 한 번만 인스턴스를 생성하도록 보장한다. - 기화 코드나 설정 코드를 안전하게 관리할 때 유용하게 사용 - 싱글톤 인스턴스의 초기화를 보장 type singletonByBasic struct { data string } var ( once sync.Once instanceByBasic *singletonByBasic ) func getInstanceByBasic() *singletonByBasic { once.Do(fu..

[디자인패턴] 시작

# 동기 개발자로서 알아야 할 내용으로 알고 있었다. golang으로 접하기 어렵고 자바로 된 예시가 많아서 그동안 외면하고 있었다. 문득 한번 제대로 공부해보자라는 생각이 들었다. 그래서 강의를 들으면서 챗GPT에 도움을 받아서 진행할 예정이다. # 목표 싱글톤 팩토리 메소드 프록시 패턴 이터레이터 패턴 옵저버 패턴 전략 패턴 무조건 6개의 패턴을 먼저 하고 그다음에 나머지 패턴을 해보자! 6개는 무조건 하기!! # 참조 자료 https://github.com/tmrts/go-patterns GitHub - tmrts/go-patterns: Curated list of Go design patterns, recipes and idioms Curated list of Go design patterns, ..

XORM 사용하는 이유와 통계 관련 SQL

# XORM 사용하는 이유 SQL문을 사용하지 않고 XORM을 사용하는 이유는 오류를 방지하기 때문이다. 복잡한 SQL문을 직접 쓰다 보면 오류 발생하는 경우가 종종 있다. 그러나 통계같은 건 SQL문을 직접 사용하는 것이 좋다. # XORM 사용한 SQL문 q := cocommon.GetDB(ctx).Table("popups"). Select("id, device_type,title,start_date,end_date,closed"). Where("1=1"). And("closed =?", false). And("display_page like '%" + enum.MAIN.String() + "%'"). Asc("order_by").Desc("start_date") 이렇게 사용한다. 하지만 SQL문 전..

[React] 파일 사이즈가 크면 에러 메시지 띄우기

# 배경 회사에서 이미지 사이즈와 파일 사이즈에 제한을 두려고 했다. 백엔드에서도 제한을 뒀지만 API 호출하기 전에도 제한을 주려고 했다. # 내용 나는 1MB 이상 이미지 파일이면 에러 메시지를 띄웠다. const IMAGE_MAX_SIZE = 1 * 1024 * 1024; 만약 10MB로 하고 싶으면 1를 10으로 변경하면 된다. # 코드 const IMAGE_MAX_SIZE = 1 * 1024 * 1024; const FileStudy = () => { const [ imgErrMessage ,setImgErrMessage] = useState("이미지를 넣어주세요") return ( { if (e.target.files[0]) { e.target.files[0].size > IMAGE_MAX_S..

Study/React 2023.08.09

[MySQL] DB 용량 체크하는 쿼리

# 배경 입사 초기에 어떤 테이블마다 사이즈가 얼마나 되는지 알아보는 시간을 가졌다. # 문법 SELECT TABLE_NAME AS `Table`, ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)` FROM information_schema.TABLES WHERE TABLE_SCHEMA = "스키마이름" AND TABLE_NAME = "테이블명" ORDER BY (DATA_LENGTH + INDEX_LENGTH) DESC; # 예시 SELECT TABLE_NAME AS `Table`, ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)` FROM information_sche..

Study/Mysql 2023.08.08

RabbitMQ 를 Mac 환경에서 설치 및 실행

https://www.rabbitmq.com/install-homebrew.html The Homebrew RabbitMQ Formula — RabbitMQ The Homebrew RabbitMQ Formula Homebrew is a popular package manager for MacOS. RabbitMQ formula is available from Homebrew's core tap (out of the box). The formula will also install a recent supported Erlang/OTP version as a dependency. Before installing m www.rabbitmq.com 1) brew 업데이트하기 brew update 2) Rabbit..

[MySQL] 조인 해서 업데이트 시키기

# 배경 기부, 기부상태, 기부영수증 3개의 테이블을 조인해서 기부날짜 보고 기부영수증 상태 업데이트 하기 # donations 테이블 id member_id donation_date status deleted_at 회원아이디 기부날짜 기부상태 # statuses 테이블 id status receipt_available 기부상태 기부영수증가능 # donor_receipts 테이블 donation_id status 기부영수증상태 # 문법 update [테이블명1] a inner join [테이블명2] b on a.[조인된컬럼] = b.[조인된컬럼] set b.[컬럼명] = 변경할값 WHERE 조건; # 예시 UPDATE donor_receipts INNER JOIN donations on donor_rec..

Study/Mysql 2023.08.03
반응형