Laravel 로 개발을 하다 보면 Facade, Singleton, Alias 라는 용어를 접할수 있게 되는데 Facade 를 공부하다보면 Alias 는 뭐지 궁금하기도하고 Singleton 을 공부하고나면 Facade 와 무슨 차이인지 궁금해질수도 있다. (Facade 도 하나의 request 생명주기 동안 static 하게 전역적으로 값을 관리할수 있기 때문) 오늘은 각 개념의 의미, 차이점, 그리고 언제 어떻게 사용하는 것이 좋은지 알아보려고 한다. Facade란?Facade는 복잡한 라이브러리의 기능을 간단한 인터페이스로 사용할 수 있게 해주는 디자인 패턴입니다. Laravel에서 Facade는 서비스 컨테이너에 바인딩된 객체에 대한 "정적" 인터페이스를 제공 Facade의 특징서비스 컨테이너..
전체 글
개발을 하며 겪었던 경험, 이슈를 토대로 자료를 조사하고 느낀점을 기록합니다. 저와 비슷한 고민을 하고 비슷한 문제를 겪고 계신분들에게 도움이 됐으면 합니다.트랜잭션의 기본 개념트랜잭션은 데이터베이스의 상태를 변경시키는 하나의 논리적 작업 단위. 트랜잭션은 다음과 같은 특징이 있다. (ACID)원자성(Atomicity): 트랜잭션의 모든 연산이 완전히 수행되거나 전혀 수행되지 않아야 함.일관성(Consistency): 트랜잭션 전후로 데이터베이스는 일관된 상태를 유지해야 함.격리성(Isolation): 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않아야 함.지속성(Durability): 성공적으로 완료된 트랜잭션의 결과는 영구적으로 반영되어야 함. Nested TransactionsNested transactions 은 트랜잭션 내에서 또 다른 트랜잭션을 시작하는 개념. 이는 복잡한 작업을 더 작은 단위로 나누어 관리할 수 있게 해준다. 그러나 MySQL..
자바 14에서 Preview 형태로 나와 자바 16부터 정식 지원하는 record 타입 클래스가 있다. 불변 객체를 위한 클래스라고도 한다. 왜냐하면 모든 필드가 final 로 정의되기 때문이다. 사용법 public record Person( String name, int age, String gender ) { } Person person = new Person("이준호", 99, "M"); System.out.prinln(person.name()); // 이준호 소괄호 안에 필드를 정의한다. 클래스내 구현 내용이 있든 없든 중괄호가 무조건 있어야 한다. 클래스 필드에 접근 할 경우 get{필드명} 이 아닌 {필드명} 만을 사용한다. ex) person.name() 특징 모든 필드는 final 로 선..
올해 1월 OpenAI 에서 GPT 스토어(GPTs)를 출시하였는데 ChatGPT 와 외부 리소스를 연동하여 ChatGPT 의 활용폭을 좀더 넓힐수 있다. 난 크롤링한 해외 뉴스 데이터를 번역하여 내용을 요약, 큐레이션을 해보고 싶었고 금전적인 이유로 OpenAI API 를 쓸지 Gpts 를 활용할지 고민이 있었다. (사실 비용이 좀 들어도 상관없다면 OpenAI API 를 활용하는게 가장 깔끔하다.) 결국 Gpts 도 경험해볼겸 api 서버와 Gpts 를 연동해보았다. (GPT Plus 이용자만 GPTs 사용이 가능하다.) 1. GPTs 생성 화면으로 이동 2. GPTs 설정 instruction 에 작업내용에 대한 지시를 할 수 있다. GPTs 는 웹 브라우징이 가능하고 DALL·E 를 활용한 이미..
사용자 메뉴얼을 위키 형태로 만들어야 할 일이 있었는데 어떻게 구축할지 고민이 있었고 요구사항은 다음과 같았다. - 버전관리가 되면 좋겠다. - 간편하게 구현, 관리 포인트를 줄이고 싶다. (static 웹 페이지) - 관리자가 에디터로 편집 (optional) - 기존 서비스 사용자 기반 접근 권한 관리 (optional) 버전 관리는 git 으로 하면될거 같다. 그리고 optional 은 되면 좋고 안되도 괜찮은 사항이라 간편하게 구현 할수있는 것을 중점으로 알아보았다. wiki.js mkdocs sphinx 알아본 바 오픈소스로 위키를 구현할수 있는 프로젝트는 위 3가지 정도가 메이저하게 쓰이는 것 같고 특징은 다음과 같다. wiki.js - 상대적으로 복잡한 구현 DB 와 호스팅이 필요하기때문에 ..
https://github.com/junholee14/laravel-unicode-normalizer GitHub - junholee14/laravel-unicode-normalizerContribute to junholee14/laravel-unicode-normalizer development by creating an account on GitHub.github.com 한글을 처리하다보면 유니코드 정규화가 필요한데 라라벨에서 이를 간편하게 처리할수 있는 패키지를 만들어보았다. 유니코드 정규화가 필요한 이유 [유니코드 정규화] 같은 글자가 중복으로 저장되거나 검색에서 누락 된다면 유니코드를 의심해DB 스키마에 unique 키가 걸려있는 컬럼에 중복된 값이 저장되거나 검색 결과에 나와야 할 값이 누락된..
DB 스키마에 unique 키가 걸려있는 컬럼에 중복된 값이 저장되거나 검색 결과에 나와야 할 값이 누락된 경험이 있다면 유니코드를 의심해보자. 한글과 유니코드 이 문제에대해 알아보기에 앞서 한글과 유니코드의 관계를 알아야 하는데 정리가 잘 되어있는 아래 링크를 참고하자. https://gist.github.com/Pusnow/aa865fa21f9557fa58d691a8b79f8a6d 한글과 유니코드 한글과 유니코드. GitHub Gist: instantly share code, notes, and snippets. gist.github.com 전세계 문자들을 컴퓨터에 표현하기 위해 아스키코드, 유니코드라는 코드표를 만들어 이렇게 쓰기로 약속을 하였다. 그리고 이 코드표를 참고하여 여러가지 방식으로 값을..
이제 테스트코드의 필요성은 굳이 여기서 말을 하지 않아도 될 정도로 다들 잘 알고있고 그만큼 널리알려져 있다고 생각한다. 그래도 개인적인 경험을 말해보자면 난 처음부터 테스트코드를 작성하진 않았다. 사실 그땐 테스트코드에 대한 존재 자체도 잘 몰랐다. 첫 회사에선 코드를 작성하고 서비스를 운영 했던 방식은 다음과 같았다. (프론트, 백엔드 모두 작업하던 환경) 1. 신나게 어플리케이션 코드 작업 2. 손수 한땀한땀 클릭 클릭, 오고가는 데이터까지 확인하며 기능 작동 확인 3. 버그 발견시 1. 로 회귀. Or 스테이지 서버에 배포후 다시 한번 기능 테스트 (QA) 4. 배포 이렇게 일을 하며 느꼈던 점은 테스트 과정이 지루하기도 하고 기존 기능에 무언가 추가 되었을때 똑같은 테스트를 또 해야했기에 ..