would like hater wonder like station 동네사람들, Yana가 이 글들은 진짜 야망있게 써봤다는디 🌟
Project2024.04.02 21:44작고 귀여운 나의 운영서버를 위한 Spring + react 프로젝트 정적 리소스 배포기(feat.. spring servlet custom filter + 왜 mvc 패턴은 지양되고 있는가.)

BE : Spring + FE : React 프로젝트를 작은 규모의 cloud server(aws : t2.micro, ncloud : Standard)에 배포하며 마주한 이슈 1. 마주했던 고민 외주 프로젝트에서 Backend는 Spring 프레임 워크로 Frontend는 React라이브러리를 활용해 mvp 모델을 개발하던 중, 우선 가장 작은 규모의 cloud server(aws기준 t2.micro - RAM 1GiB)에 배포하면서 어떤 구조로 서버를 배포해야 할지 고민하게 되었다. FE, BE 서버를 각각 run 시킬 것인지, 아니면 하나의 서버에서 각각 다른 포트에 FE, BE server를 구동할 것인지.. 혹은 mvc패턴으로 react 앱을 빌드한 뒤 spring 서버에서 정적 리소스로 제공할..

[mysqlDump] DB 합치기.. 그거 어떻게 하는건데.....? feat.. mysqldump
DB2023.09.06 22:01[mysqlDump] DB 합치기.. 그거 어떻게 하는건데.....? feat.. mysqldump

1. 안녕하세요? AWS에 벽돌 12,000장쯤 사준 YanaKo94입니다. RDB 인스턴스를 줄여야할 필요성의 대두..(feat 비용절감... 어디부터 해볼까..!) 그렇다, 프로젝트를 AWS RDS와 EC2를 통해 배포한 지 어언 1년가량이 흘렀고... 나의 AWS 관련 비용 지출은 이제는 조금 자신 있게 "아마존에 벽돌 낭낭히 사줬습니다"라고 할 수 있을 정도가 되어버렸다. 프로젝트를 내리고 싶지 않았기에 결국 비용 절감을 위해 기존 배포방식을 변동하기로 결심했고, EC2의 경우 인스턴스를 합치기 전에 CD를 구축하면서 업로드받는 resorce를 인스턴스 내부에 저장하는 방식에서 S3 storage로 변경하는 것이 필요하다고 판단해 우선 RDB부터 정리를 시작했다. 2. mysqldump, 뭐하는 ..

Project2024.01.24 13:01[AWS] 아마존 벽돌 그만 사주기 프로젝트, Resource Consolidation(월 25만원 - >2만원)

AWS… 월 청구 비용 25만원. 이게 정말 맞나요?(클라우드에 대한 이해 없이 진행한 배포의 비싼 수업료)  EC2 인스턴스 2개에서 spring - jsp 프로젝트와 node-react 프로젝트를 돌리던 어느날, 어마무시한 청구서가 날아왔다. 팀프로젝트를 진행하며 동일한 DB를 사용하기위해 공유했던 각 프로젝트들의 RDS 인스턴스와 더불어서, node-react에 대한 이해 없이 백엔드와 프론트엔드 각각의 js 런타임을 서버에서 돌리기 위해 규모가 큰 EC2인스턴스를 사용한 결과였다. AWS 클라우드와, Node 그리고 JS의 런타임에 대한 이해의 부족이 만들어낸 눈덩이같은 결과였다.  이에, 우선 사용중인 AWS 서비스들이 정말 필요한지 판단을 하기 시작했는ㄷ, 포트폴리오를 위한 서비스들이었고, 유..

[playground]  Entity update, 어떤게 최선이지?
playground(java-spring,멀티모듈)2023.07.03 17:38[playground] Entity update, 어떤게 최선이지?

프로젝트를 진행하며 Member에 대한 CRUD를 구현하던 중, 가장 고민이 됐던 부분은 Update라고 말할 수 있다. 1. Setter방식, 과연 이대로 괜찮은가? 처음에는 아래와 같이 Member Entity의 @Setter를 열어둔 뒤, update시에 Dto를 통해 받아온 값들을 Entity에 각각 SetXXX해주는 방식을 사용했었다. @Transactional public Member updateMember(Member member) { Member existingMember = getMemberByEmail(member.getEmail()); existingMember.setEmail(member.getEmail()); existingMember.setPassword(member.getPas..

[zsh, iterm2] alias 설정하다가 .zshrc 날려먹은 썰 푼다..(카오스엔지니어링?)
(공통)troubleshooting2024.05.06 17:13[zsh, iterm2] alias 설정하다가 .zshrc 날려먹은 썰 푼다..(카오스엔지니어링?)

0. 상황    - rosetta 전용 iterm shell 을 생성하고, 관련 alias를 생성하던 중.. 잘못된 명령어를 입력해 .zsh 파일이.. 덮어씌워졌다.1. 울지 말고 말해봐  좌절하던 내게 코코가 보내온 한마디....... 그래...! 나는...! 내게 카오스 엔지니어링을 하는 중인거야!2. 원인    - 원인은.. alias를 생성하다가.. 정말..무심결에...입력한.. 단...한줄의... 스크립트에서 시작된다..!! 주의 !! 아래 스크립트는 절대 따라 입력하지 마시오..!!alias rpyenv="arch -x86_64 /usr/local/bin/pyenv" -> .zshrc  그렇다..  >>를.... 정신을 놓은채로 ->로 입력하고 말았다...원래 입력했어야할 스크립트는.. 아래..

[playground] @Embedable, Dto, Mapstruct, Entity setter 그 사이의 고민들
playground(java-spring,멀티모듈)2023.07.03 17:39[playground] @Embedable, Dto, Mapstruct, Entity setter 그 사이의 고민들

1. @Embedded , @Embeddable : JPA_ Entity의 가독성 높이기 1.1 Member Entity의 기존 구성요소 public class Member extends Auditable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false, unique = true) private String email; @Column(length = 20) private String nickname; private String password; private String realName; @Column(nullable = false, unique = true) private ..

[CD] Docker compose, Docker hub, webhook, node.js를 활용한 야매 CD 개발기
Project2024.04.17 18:56[CD] Docker compose, Docker hub, webhook, node.js를 활용한 야매 CD 개발기

1. 학습 계기 기존에 개발해 둔 팀프로젝트들을 배포해서 포트폴리오로 사용하고자 하였다. 직접 AWS server에 올려보니 local환경이 아니기 때문에 발생하는 이슈들이 있었으며, 팀프로젝트 배포당시 발견되지 못했던 이슈들이 있어 수정작업을 하다 보니 매번 수정 후 server에 올려 확인하는 작업이 매우 불편하게 느껴졌다.(기존에는 git repo를 server에 직접 pull 받아 이미지를 build 하는 방법을 사용하다가 용량이 적은 프리티어 서버에서 직접 build를 하는 것에 부담을 느껴 -> build한 파일을 별도의 github repo에 업로드해서 서버에서 pull 받아 사용하던 방법을 사용하고 있었다. 프록시의 경우에는 처음에는 포트포워딩을 설정해 두었다가, nginx를 통해 리버스프..

Java2024.01.08 14:15[JAVA] System.out.print~의 사용을 지양해야만 하는 이유를 알아보자(feat,, IO, 휘발성, 출력레벨, 성능저하..)

사실 전부터 'System.out.print()를 사용하면 성능에 좋지 않고 logger가 조금 더 프로젝트 내부에서 출력을 하는 목적에 맞으니 logger를 사용해보세요’라는 피드백을 받고 "System.out의 사용을 지양해야겠구나"라고는 생각하였으나 제대로 파헤쳐 보지 못했는데, 오늘 JAVA교육 수강 중 System.out이 나와 이참에 “대체 왜 System.out은 운영 및 개발환경에서 사용을 지양해야하는지” 알아보고자 한다. +[게시글 작성 마무리 작업 중 추가하는 한 마디] 한번 제대로 파헤쳐보니, 왜 System.out의 사용을 지양해야하는지 이해가 가기 시작했다. 습관적으로, 그리고 logging 프레임워크를 불러와 사용하기 귀찮다는 이유로, 디버깅 상황에서 Sout을 호출하던 습관을 ..

[arm, amd] M1 맥북에서 intel 버전 사용기(rosetta 전용 터미널 만들어 편하게 사용하기!)
(공통)troubleshooting2024.05.08 00:49[arm, amd] M1 맥북에서 intel 버전 사용기(rosetta 전용 터미널 만들어 편하게 사용하기!)

[작성중]0. 상황    - 새로 참여하게 된 프로젝트가 arm을 지원하지 않는 python 버전(3.7.9)을 사용하고 있었다.    - 하지만 나의 노트북은 M1(arm)... 어쩌지!      ( 관련된 나의 python 관련 삽질 일기는 여기! 에서 볼 수 있다 ...;-    - 팀 리드분이 "rosetta" 를 이용해 intel 기반으로 환경 설정을 맞출것을 요청하셔서,       iterm을 복제해 rosetta 전용 터미널로 적용하고 brew나 pyenv처럼 자주 사용할 명령어에 대해서는 alias를     적용해 사용하기러 결정했다. + 각 아키텍쳐별 터미널을 켤때 해당 아키텍쳐별 PATH로 알아서 변경해준다면..?1. rosetta가 적용된 iterm2를 만든다!1. finder 에서..

[playground] spring boot 멀티모듈 프로젝트 시작하기
playground(java-spring,멀티모듈)2023.06.25 21:35[playground] spring boot 멀티모듈 프로젝트 시작하기

백엔드 개발자로 취업을 준비하며, 국비교육 이후 몇 개의 프로젝트들을 진행해 왔지만 "매력 있는 신입 개발자"가 되기에는 모자람을 느꼈다. 이에 백엔드 개발자 커뮤니티와 각종 커피챗에 참여해 현직 미들, 시니어급 개발자분과 이야기를 나눈 후 Spring Framework의 Security와 Oauth2, JPA, Batch 등 실무에서 기본적으로 다룰 기능들이 포함되며 Testcode와 api 명세 자동화에 대한 나만의 고민이 담긴 프로젝트를 취업 준비와 병행하기로 결정해서 진행 중이다. 이미 시작한 지는 조금 되었지만 기존 프로젝트들과 다르게 하나하나 많은 고민들이 담긴 프로젝트이기에 작은 고민까지 하나하나 기록에 남기고 싶어 블로그 연재를 시작한다. 우선, 아키텍처는 멀티모듈 아키텍처를 선정해서 진행..

Project2023.12.26 17:08front에서는 multipart formdata로 보내준 request가 spring에서는 application octet-stream이 되어 돌아오는 마법(HTTP 표준과 content type, multipart formdata)

obsidian에서 작성중 MultipartResolver를 bean으로 설정해주어야 하는가? No spring 어플리케이션의 경우 web.xml에서 MultipartResolver를 bean으로 직접 등록해주어야 하지만, spring boot 어플리케이션은 default로 제공한다. HTTP 표준과 content type HTTP 표준은 1개의 요청에는 하나의 content type만 전송하는것을 약속함. (여러개의 content 타입을 전송하는것이 불가능한것은 아님.) multipart formdata가 여러 content-type를 보낼수 있도록 만들어진 것 아닌가? multipart formdata란? 디버깅으로 밝혀진 @ReuestParam의 반란 이미지 등의 file 업로드를 별도의 api로 ..

Yana의 최근 글..🏃‍♀
[aws] 드디어 때가 되었다, 반쯤 죽어 눈을 반만 뜬 나의 인스턴스를 살릴 시간이..(ec2 인스턴스 상태검사 1/2통과, 인스턴스 연결성 검사 실패)
[aws] 드디어 때가 되었다, 반쯤 죽어 눈을 반만 뜬 나의 인스턴스를 살릴 시간이..(ec2 인스턴스 상태검사 1/2통과, 인스턴스 연결성 검사 실패)
aws
2024.05.20 22:31
0. 상황    - Docker compose로 java 어플리케이션을 3개 올려놓은 내 ec2 인스턴스는, docker compose를 up 한 뒤 24시간 이내로 CPU가 튀면서 인스턴스 상태검사에 실패하고, 배포 사이트 접속은 물론 ssh 접속마저 불가능해지는 이슈가 있었다.    - 모니터링을 확인해보니, compose up을 실행한 후 하루가 되지 않아 실제로 cpu 사용율과 cpu크레딧 사용량이 튀면서 더이상 네트워크 패킷이 정상적으로 오가지 않는 것을 확인할 수 있었다.1. 에러코드 전문    - 일단...로그를 뺄 수 있을까? 시도해 보자2. 원인    - Amazon ec2는 아래 세 가지 상태 확인을 통해 각 ec2 인스턴스 상태를 모니터링한다.        1. 시스템 상태 확인   ..
[Java] GC log 확인하기(내 가녀린 EC2인스턴스는 정말 GC때문에 죽는게 맞을까? + 갑자기 튀어나온 SerialGC..?)
[Java] GC log 확인하기(내 가녀린 EC2인스턴스는 정말 GC때문에 죽는게 맞을까? + 갑자기 튀어나온 SerialGC..?)
Java
2024.05.20 22:25
0. 상황    - 이전 글 에서 말했듯이 aws의 t4g.micro(기존 : t3.micro)라는 작고 가녀린 ec2인스턴스에 docker compose로 spring 어플리케이션을 3개 + nginx까지 구동시키다가, oom kill java 이슈가 발생했다..(해당 상황을 참여중인 커뮤니티에 공유하니, 모두들 이구동성으로 t3.micro, t4g.micro에 사과하라고 하셨다😅😅)1. 에러코드 전문    - ec2 인스턴스의 System log에서 발견한 oom 관련 로그는 아래와 같았다.[69465.875991] systemd invoked oom-killer: gfp_mask=0x140cca(GFP_HIGHUSER_MOVABLE|__GFP_COMP), order=0, oom_score_adj..
[AWS summit seoul 2024] 참가 일기 >-<
[AWS summit seoul 2024] 참가 일기 >-<
diary
2024.05.18 21:11
드디어 야나 난생 처음으로 AWS 써밋 댕겨왔습니다여이이이-!!!  개발로 넘어오기 전 근무했던 사무실이, 코엑스 바로 옆이었어서 감회가 더 색달랐다..!  첫 세션은 컨테이너..! EMR on EKS..!사실 아직 컨테이너 기술과 데이터 처리 분야에 대해서는 배경지식이 거의 없었기에 온전히 이해할 수는 없었지만(물론 설명을 정말 쉽게 해주신 덕분에 대략적인 감은 잡을 수 있었다!), 데이터 사용을 원하는 개발자들이 다른것이 아닌 "개발"에만 집중 할 수 있도록 플랫폼을 생성하고 개선해왔다는 부분이 인상적이었다.Apach Yunikorn, Airflow 관련해서도 이야기를 많이 해주셨는데, Yunikorn에서는 고급 스케줄링으로 자원경합을 방지하고 과도한 프로비저닝을 막았다는 부분의 원리가 궁금했고, A..
[멘토링] 전자정부 프레임워크의 메뉴얼에서 “개발/테스팅 시점에만 System.out.println()을 사용하고 운영으로 이관하기 전에 삭제하는 것은 좋은 방법이 아님.“이라고 하는 이유와, 현업에서 로그를 남기는 범위(가능한 많이, 되도록 폭팔하지 않게)
Project
2024.05.16 02:43
해당 게시글은 (케인)멘토님께 멘토링 세션을 통해 주고받은 질의응답의 내용을 정리한 글 입니다.😲 Q1.  운영환경이 아닌 개발환경에서 임시로 디버깅을 하기 위해서는 System.out을 사용해도 괜찮을까요?Java 강의 수강 도중 console에 출력하는 System.out(이하 sout)에 대해서 다루었습니다. sout 관련해서 기존부터 받아왔던 “Sout은 성능면에서나 로그를 남기는 이유와 관련해서나, Sout 사용을 지양하고 logger또는 logger 프레임워크를 사용하는것이 좋습니다” 라는 피드백이 생각나, “왜 개발 및 운영환경에서 Sout의 사용을 지양해야하는지” 이번 기회에 공부해보았습니다…관련해서 생긴 궁금증으로는 “운영환경이 아닌 개발환경에서 임시로 디버깅을 하기 위해서는 Syste..
백엔드(Backend)
[Java] GC log 확인하기(내 가녀린 EC2인스턴스는 정말 GC때문에 죽는게 맞을까? + 갑자기 튀어나온 SerialGC..?)
[Java] GC log 확인하기(내 가녀린 EC2인스턴스는 정말 GC때문에 죽는게 맞을까? + 갑자기 튀어나온 SerialGC..?)
Java
2024.05.20 22:25
0. 상황    - 이전 글 에서 말했듯이 aws의 t4g.micro(기존 : t3.micro)라는 작고 가녀린 ec2인스턴스에 docker compose로 spring 어플리케이션을 3개 + nginx까지 구동시키다가, oom kill java 이슈가 발생했다..(해당 상황을 참여중인 커뮤니티에 공유하니, 모두들 이구동성으로 t3.micro, t4g.micro에 사과하라고 하셨다😅😅)1. 에러코드 전문    - ec2 인스턴스의 System log에서 발견한 oom 관련 로그는 아래와 같았다.[69465.875991] systemd invoked oom-killer: gfp_mask=0x140cca(GFP_HIGHUSER_MOVABLE|__GFP_COMP), order=0, oom_score_adj..
[멘토링] NoSQL에서 "no"의 해석, 가상환경과 DB
DB
2024.05.16 02:33
해당 게시글은 (케인)멘토님께 멘토링 세션을 통해 주고받은 질의응답의 내용을 정리한 글 입니다.😲 Q1.  NoSQL에서 no의 해석에서는 의견이 갈린다고 들었습니다. 멘토님께서는 NoSQL에서 no를 어떻게 해석하시나요?- no- not only- non-relational operational- non-relational database 👨‍🎓 A1.  no는 not only의 NO라고 봅니다.SQL이 DB에서 우선순위가 높은 선택지였을때 나온것이 noSQL이라 불리우는 범주의 DB였기 때문입니다.즉, RDB만으로는 해결하기 어려운 문제가 점차 가속되던 상태에서 나온것이 noSQL입니다.(데이터가 늘어나는데 RDB에서는 그를 따라갈만한  RDB 퍼포먼스가 잘 나오지 않았고, DB가 못견뎌서 램을..
[멘토링] DTO의 분리시기, innerClass와 record, 비동기 통신 응답 방법관련 고민(kafka, websoket, gRPC..?)
Spring
2024.05.15 23:34
해당 게시글은 (케인)멘토님께 멘토링 세션을 통해 주고받은 질의응답의 내용을 정리한 글 입니다.😲 Q1.  멘토님께서는 service DTO controller DTO의 분리시기가 언제라고 보시나요? spring boot 어플리케이션에서 dto를 사용 할 때 어플리케이션 개발 초기에는 컨트롤러와 서비스 레이어 각각 나눠서 두기에는 두 dto간 요소 차이가 없을것이고 결국에는 코드의 중복으로 이어지기에, 대부분의 개발 초반에는 하나의 dto로 개발을 진행한 뒤, 프로젝트 규모가 커지면 추후에 분리하는편이라고 들었습니다. 저 또한 토이프로젝트 팀원들과 dto의 레이어별 분리 관련해서 논의를 진행중에 있습니다. 멘토님께서는 두 레이어에서 dto를 분리해야하는 시기는 언제쯤이라고 보실까요…! 👨‍🎓 A1...
[멘토링] 프로젝트에서 버전 선택의 기준, 버전 이슈 의심되는 상황에서 대처법
Spring
2024.05.15 23:20
해당 게시글은 (케인)멘토님께 멘토링 세션을 통해 주고받은 질의응답의 내용을 정리한 글 입니다.😲 Q1.  지난 11월 23일에 Spring Boot 3.2가 정식 릴리즈 되면서 생긴 궁금증입니다…!멘토님께서 보시기에, 현 상황에서 첫 스프링 프로젝트를 진행할 신입 개발자가 새로운 팀 프로젝트를 진행한다면가장 최근 릴리즈 버전인 3.2버전을 사용하는것을 추천하시는지, 아니면 조금 더 안정화되고 레퍼런스가 많은 3.0 혹은 3.1 버전을 추천하시는지 궁금합니다…! 👨‍🎓 A1.  제가 개발을 한다고 하면, 저는 새로운 이슈를 마주하는것을 즐기기 때문에 3.2버전을 쓸 것 같습니다. 하지만 신입과 주니어 개발자라는 대상이라고 하면 레퍼런스가 많은 3.0버전을 사용하라고 할 것 같습니다. 어느정도 경력이..
[멘토링] 특정 entity에 1:1 관계로 여러 개의 entity가 묶여있는 상황에서 특정 entity를 포함한 연계 entity들을 통합 조회하는 경우, 연계 entity의 값이 없는 경우에 대한 처리방법
DB
2024.05.15 20:24
해당 게시글은 (케인)멘토님께 멘토링 세션을 통해 주고받은 질의응답의 내용을 정리한 글 입니다.😲 Q1.  특정 entity에 1:1 관계로 여러 개의 entity가 묶여있는 상황에서 특정 entity를 포함한 연계 entity들을 통합 조회하는 경우, 연계 entity의 값이 없는 경우에 대한 처리방법을 고민하고 있습니다.특정 entity에 여러개의 entity가 1:1관계로 묶여있습니다. 특정 entity에 1:1 관계로 여러 개의 entity가 묶여있기 때문에 entitygrapth를 이용해 일시에 값을 받아오고자 합니다. 하지만 연계되는 entity가 실제로 존재할지 아닐지는 알 수 없으며, 연계되는 entity값이 아직 생성되지 않았을 수 있습니다. 이러한 상황에서 현재 떠올린 방법은 두가지가..
유연한 개발자가 되기 위한 길(CS)
[algorithm] 정렬(버블정렬, 선택정렬, 삽입정렬, 퀵정렬, 병합정렬, 힙정렬, 기수정렬, 계수정렬)
[algorithm] 정렬(버블정렬, 선택정렬, 삽입정렬, 퀵정렬, 병합정렬, 힙정렬, 기수정렬, 계수정렬)
CS
2024.05.15 21:48
정렬버블 정렬(Bubble Sort) - 시 O(n^2) | 공 O(n)서로 인접한 두 원소의 대소를 비교, 조건이 맞지 않다면 자리를 교환해 정렬선택정렬(Selection Sort)과 유사배열의 길이가 길어질수록 비효율적시간 복잡도 계산(n-1) + (n-2) + (n-3) + … + 2 + 1 => n(n-1)/2최선, 평균, 최악의 경우 모두 시간복잡도가 O(n^2) 으로 동일공간 복잡도 : O(n)void bubbleSort(int[] arr) { int temp = 0; for(int i = 0; i arr[j]) { // 3. // swap(arr[j-1], arr[j]) temp = arr[j-1]; arr[j-1] = arr..
[Devops..?] Proxmox와 베어메탈 가상화
[Devops..?] Proxmox와 베어메탈 가상화
Linux
2024.05.12 19:23
0. 학습 계기devops 혹은 SE관련 경력이 없음에도 불구하고, 한 회사의 Jr.Devops 포지션에 casualChat을 통과해 TechChat을 진행하게 되었다.캐주얼 챗에서 입사하게되면 가장 먼저 다루어보게 될 기술에 대해서 여쭈었고, proxmox와 VM으로 서버를 구축하고 그 위에 서비스를 붙이는 일들을 하게 될것이라는 답변을 받았다. 이에 처음 들어봤던 Proxmox에 대해 찾아보다가 베어메탈 가상화와 관련되어 공부하게 된 부분을 정리한 글이다.1. Proxmox와 베어메탈 가상화 ✅ Yana language왜 사용할까? - ”유연하고 비용 효율적인 데이터 센터”결론은 하드웨어적 의미의 컴퓨터 위에 Proxmox와 같은 하이퍼바이저 OS를 설치해 사용함으로써,- Host OS 를 설치하는 ..
데이터베이스-동시성 제어
데이터베이스-동시성 제어
CS
2024.02.06 12:57
데이터베이스-동시성 제어란? 📌 Concurrency Control. 여러 사용자가 데이터를 동시에 액세스하는 것처럼 보이지만 내부적으로는 하나씩 실행되도록 트랜잭션을 직렬화하는 것. 동시성을 제어할 수 있도록 하기 위해 모든 DBMS가 공통적으로 Lock 기능을 제공 트랜잭션의 직렬성 보장 공유도 극대화, 응답 시간 최소화, 시스템 활용의 극대화 데이터의 무결성과 일관성 보장 동시성 제어를 하지 않은 경우 발생하는 문제점 동시성 제어 기법의 종류 락(lock) locking이란 트랜잭션들이 같은 데이터에 대해 동시에 접근하지 못하도록 제어하는 것 트랜잭션이 데이터에 Read나 Write 연산을 수행하려면 반드시 lock을 해주고, 수행이 끝나면 unlock을 해주어야 함 공유락 (shared lock)..
[DB] Index란?
CS
2024.01.18 09:12
소유자: 야나 인증: 인증 완료 Main Category: CS Category: DB Status.: In progress Tags: DB, NoSQL, RDB, RDBMS 생성 일시: 2023년 5월 22일 오후 3:31 생성자: 야나 최종 편집자: 야나 Index Index란? 📌 사전 : 색인, 지표, 기호 또는 무언가의 척도 DB관점 : 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조. 데이터베이스 안의 레코드를 처음부터 풀스캔하지 않고, B+ Tree로 구성된 구조에서 Index 파일 검색으로 속도를 향상시키는 기술이다. 테이블의 칼럼을 색인화한다. 마치, 두꺼운 책의 목차와 같다고 생각하면 편함. 인덱스는 항상 최신의 정렬 상태를 유지한다..
[CS] 엣지 케이스와 코너 케이스는 뭘까?(feat.. 조금 더 안정성 있는 서비스를 향하여..)
CS
2024.01.16 10:42
학습 계기 유데미의 Java 강의에서 객체지향 코드 케이스를 작성하다가, 엣지케이스라는 용어를 마주했다. QA관련해서 API의 테스트코드를 작성 하면서 그리고 정보처리기사를 공부하면서 몇 번 들었던 용어인데 제대로 정리를 해본적이 없는 것 같아 이번 기회에 정리해보고자 한다. 이번 학습으로 인한 기대 효과 API를 짜오면서 테스트를 진행하고자 할 때, 단순히 '성공하는 테스트’와 '명확하게 실패하는 테스트’뿐 아니라 **‘문제가 될 수 있는 부분을 검증하는 테스트’**도 진행해보고싶었는데, 대체 어떤 부분을 어떤식으로 작성해야하는지 막막했던 적이 있었다. 이번 학습을 통해 엣지 케이스와 코너 케이스 같은 용어를 공부하고, 어떤식으로 엣지 케이스를 세울 수 있는지 배워서 조금 더 안정성 있는 서비스를 만드..
Yana가 만났던 크고 작은 문제들...😵‍💫
[멘토링] "이미지 파일"과 "JSON 데이터"를 클라이언트로 부터 전달받아 POST 해야하는 요구사항에 대한 처리 방법(하나의 api 두가지 형식의 data처리 혹은 api 분리)
(공통)troubleshooting
2024.05.15 22:22
해당 게시글은 (케인)멘토님께 멘토링 세션을 통해 주고받은 질의응답의 내용을 정리한 글 입니다.😲 Q1.  현업에서는 "이미지 파일"과 "JSON 데이터"를 클라이언트로 부터 전달받아 POST 해야하는 요구사항이 있는 경우, 어떤식으로 구현하시나요? 한번의 request로 두 형식의 data를 받아서 처리하시는지, 아니면 분리하는것이 더 나을지 고민이 됩니다.Spring boot application에서 파일과 여러 정보가 담긴 json 데이터를 하나의 api로 전달받아서 파일의 S3업로드 후 업도르 파일의 url을 여타 정보들과 함께 담아 하나의 entity에 저장하려했습니다. frontend에서 content-type을 multipart/formdata로 명시하고 파일을 담아서 보내줬으며, spri..
[멘토링] ec2인스턴스의 메모리 부족 관련해서, spring 어플리케이션의 가용 메모리에 제한을 걸어주거나 connection 생성에 제한을 두는 방법이 있을까요?
(공통)troubleshooting
2024.05.15 21:38
해당 게시글은 (케인)멘토님께 멘토링 세션을 통해 주고받은 질의응답의 내용을 정리한 글 입니다.😲 Q1.  ec2인스턴스의 메모리 부족 관련해서, spring 어플리케이션의 가용 메모리에 제한을 걸어주거나 connection 생성에 제한을 두는 방법이 있을까요?제 개인 포트폴리오를 위한 aws 인스턴스에서 스케일 관련 이슈가 있어 질문드립니다. 현재 aws 프리티어 ec2서버인 t2.micro에 docker-compose를 이용해 spring application 3개와 nginx를 띄워 리버스 프록싱을 적용함으로써 운영중입니다.어플리케이션을 띄울때에는 조금 느리다는 부분 말고는 정상적으로 구동이 되는데, 이틀간격으로 어플리케이션이 다운되는 현상을 마주했습니다.해당 부분 관련해서 파악을 해보니, 스프링..
[arm, amd] M1 맥북에서 intel 버전 사용기(rosetta 전용 터미널 만들어 편하게 사용하기!)
[arm, amd] M1 맥북에서 intel 버전 사용기(rosetta 전용 터미널 만들어 편하게 사용하기!)
(공통)troubleshooting
2024.05.08 00:49
[작성중]0. 상황    - 새로 참여하게 된 프로젝트가 arm을 지원하지 않는 python 버전(3.7.9)을 사용하고 있었다.    - 하지만 나의 노트북은 M1(arm)... 어쩌지!      ( 관련된 나의 python 관련 삽질 일기는 여기! 에서 볼 수 있다 ...;-    - 팀 리드분이 "rosetta" 를 이용해 intel 기반으로 환경 설정을 맞출것을 요청하셔서,       iterm을 복제해 rosetta 전용 터미널로 적용하고 brew나 pyenv처럼 자주 사용할 명령어에 대해서는 alias를     적용해 사용하기러 결정했다. + 각 아키텍쳐별 터미널을 켤때 해당 아키텍쳐별 PATH로 알아서 변경해준다면..?1. rosetta가 적용된 iterm2를 만든다!1. finder 에서..
[zsh, iterm2] alias 설정하다가 .zshrc 날려먹은 썰 푼다..(카오스엔지니어링?)
[zsh, iterm2] alias 설정하다가 .zshrc 날려먹은 썰 푼다..(카오스엔지니어링?)
(공통)troubleshooting
2024.05.06 17:13
0. 상황    - rosetta 전용 iterm shell 을 생성하고, 관련 alias를 생성하던 중.. 잘못된 명령어를 입력해 .zsh 파일이.. 덮어씌워졌다.1. 울지 말고 말해봐  좌절하던 내게 코코가 보내온 한마디....... 그래...! 나는...! 내게 카오스 엔지니어링을 하는 중인거야!2. 원인    - 원인은.. alias를 생성하다가.. 정말..무심결에...입력한.. 단...한줄의... 스크립트에서 시작된다..!! 주의 !! 아래 스크립트는 절대 따라 입력하지 마시오..!!alias rpyenv="arch -x86_64 /usr/local/bin/pyenv" -> .zshrc  그렇다..  >>를.... 정신을 놓은채로 ->로 입력하고 말았다...원래 입력했어야할 스크립트는.. 아래..
[aws-elb] target is in an availability zone that is not enabled for the load balancer
[aws-elb] target is in an availability zone that is not enabled for the load balancer
(공통)troubleshooting
2024.04.06 00:24
0. 상황 - AWS ELB 중 ALB에 nstance-target-group을 변경하던 중, 새로 추가한 인스턴스의 상태가 "Unused"에서 변경되지 않으며, target is in an availability zone that is not enabled for the load balancer가 발생. 1. 에러코드 전문 - "Unused", target is in an availability zone that is not enabled for the load balancer 2. 원인 - 기존에 ELB의 서브넷 그룹관련 test를 하면서 서브넷 그룹을 일부 제외시켰는데, 새로 생성한 인스턴스가 제거된 서브넷 그룹중 하나에 생성이 되면서 발생된 문제이다 3. 해결방안 - load balancer의 작..
💪 frontend를 이해하는 backend 개발자, 어떤데..!(협업 짱이 될테야)
[React] React란?(React 사용이유, Component, Props, State, Hook, Routing, children property, CSS 모듈)
[React] React란?(React 사용이유, Component, Props, State, Hook, Routing, children property, CSS 모듈)
react
2023.12.31 21:15
오늘 수강한 강의 : # 【한글자막】 React 완벽 가이드 with Redux, Next.js, TypeScript오늘의 강의 정리 📗React란?User Interface를 만들기 위한 JS 라이브러리(Facebook_현재Meta에서 만들었다.)웹 개발이 복잡해짐에 따라 html, css, js만으로는 한계가 생겼으며, 초기에는 Web 개발을 위한 프론트엔드 라이브러리로 DOM조작을 쉽게해주는 jQuery 라이브러리가 주로 사용되었음DOM을 직접 조작하는 방식에 한계를 느껴 대규모 프로젝트에 효율적으로 코드를 관리하고, 컴포넌트 기반 UI 개발을 지원하는 프론트엔드 프레임워크(라이브러리)가 등장Angular, React, Vue를 프론트엔드 개발을 대표하는 도구 3가지라 부름Angular, Vue ..
[JS] 모듈 import, export, null과 undefined, 화살표 함수(Arrow Function), 클래스, 배열, 구조 분해 할당(destructuring), 스프레드 연산자(전개 구문)
javascript
2023.12.31 20:48
오늘 수강한 강의 : # 【한글자막】 React 완벽 가이드 with Redux, Next.js, TypeScript오늘의 강의 정리 📗JS 복습모듈 - import & export모듈개발하는 app이 커지면 어느 순산 파일을 여러개로 분리해야하는 순간이 옴js 에서 분리된 파일 각각을 모듈(module)라고 부름보통 클래스 하나나 혹은 특정한 목적을 가진 복수의 함수로 구성된 라이브러리 하나로 구성export파일이나 모듈 안의 함수나 객체를 export 할 때 사용Named exports와 Default exports 두가지 방법이 있음부모 모듈이 자식 모듈을 가져와서 다시 내보낼 수도 있음즉, 여러개의 모듈을 모아놓을 하나의 모듈을 만들 수 있음.각각의 reducer 을 만든 다음 하나의 super..
[JS] 제어구조(조건문, 비교연산, 논리연산, 일치연산, truthy, falsy, 반복문, for of, for in, foreach, while, do while, break, continue, label)와 패키지작업
javascript
2023.12.31 19:33
오늘 수강한 강의 : 【한글자막】 100일 코딩 챌린지 - Web Development 부트캠프오늘의 강의 정리 📗제어구조, 제어구문프로그램의 논리 구조를 표현할 수 있는 조건문과 반복문, 그리고 그 밖에 프로그램의 논리 구조에 영향을 미치는 구문Boolean 연산자값 : true , false (진리값)1 2; // false3 === 3; // true3 !== 3; // falseNumber.isFinite(Infinity); // falseNumber.isNaN(NaN); // true'hello'.includes('ll'); // true비교 연산자논리 연산자js는 진리값에 대한 여러 연산을 지원논리 연산// 논리 부정 (logical NOT)!true; // false!false; // ..
[JS] JavaScript 기초, 변수 var let const, 배열, 객체, 함수, 메서드, 각종 연산
javascript
2023.12.24 23:34
오늘 수강한 강의 : 【한글자막】 100일 코딩 챌린지 - Web Development 부트캠프오늘의 강의 정리 📗자바스크립트 기초 이해하기자바스크립트란?웹 페이지에서 복잡한 기능을 구현 할 수 있는 스크립팅 또는 프로그래밍 언어.보통 스크립트 언어 혹은 인터프리터 언어로 분류됨.JavaScript 코드는 JavaScript엔진에 의해 해석(기본 기계어로 직접 변환)됨.JavaScript 엔진 : JavaScript 코드를 실행하는 컴퓨터 프로그램.(최초 JS엔진) 단순한 인터프리터 -> JIT(Just-In-Time)또는 런타임 컴파일을 통해 성능 향상클라이언트 측 JS : JS 가 브라우저에서 작동하는 방식을 나타냄.이 경우 JS 엔진은 브라우저 코드 내부에 위치.모든 주요 브라우저에는 JS 엔진..
[css] 멋있는 웹사이트 만들기, 정렬, 협업기술(css변수, property, svg)
HTML & CSS
2023.12.22 13:51
오늘 수강한 강의 : 【한글자막】 100일 코딩 챌린지 - Web Development 부트캠프오늘의 강의 정리 📗멋있는 웹사이트 만들기CSS 변수변수의 선언 : "–"로 시작하는 변수명 : 사용하고자 하는 속성일반 속성과 마찬가지로 요소 내부에 선언하면 되나, 보통은 root 의사선택자 안에 적용해서 전역으로 사용main { --main-bg-color : brown;}:root { --main-ft-color: rgb(255,255,255);}변수 사용 : var(“CSS 변수명”, [해당 변수가 없을시 사용할 속성])main { background-color: var(--main-bg-color)}CSS 변수의 상속상위 엘리먼트의 변수값은 하위 엘리먼트로 상속됨하위 엘리먼트에 선언된 변수값은 상..
google search console이 많이 찾는 글 🤔
[C언어] 비교 연산자(==,!=,<>,<=>)/ 논리 연산자(&&,||), 복합 대입 연산자
C
2021.12.08 23:03
1. 비교 연산자(Comparison operator) -관계 연산자(Relational operator)라고도 함. 값을 비교하는 데 사용 연산자 표현 의미 == a==b a와 b가 같다 != a!=b a와 b가 다르다 b a가 b보다 작다 =b a가 b보다 크거나 같다 #include int main() { int number = 5; printf("number 는 5와 같습니까? %d\n", number == 5); // 같으므로 1(참) 반환 printf("number 는 4와 같습니까? %d\n", number == 4); // 같지 않으므로 0(거짓)반환 printf("number 는 5와 다릅니까? %d\n", number != 5); // 같으므로 0(거짓)반환 printf("number ..
[Spring Boot] 스프링부트 에러 (Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.) DB연결 하지 않을 때..
[Spring Boot] 스프링부트 에러 (Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.) DB연결 하지 않을 때..
(공통)troubleshooting
2022.03.23 01:44
0. 상황 스프링 부트 프로젝트 생성후, 처음으로 서버를 돌리고자 할 때 어플리케이션 시작에 실패하며 발생. 1. 에러코드 전문 *************************** APPLICATION FAILED TO START *************************** Description: Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. Reason: Failed to determine a suitable driver class Action: Consider the following: If you want an embedded databa..
[C언어] 배열(Array) 선언, 인덱스, 주소
C
2021.12.09 06:09
1. 배열(Array)이란? - 일종의 집합. 하나의 변수에 여러 개의 값을 넣을 수 있다. 1) 배열 선언 자료형 배열이름[크기 n ( = 요소의 개수)] = {값1, 값2, 값3, ...값n} - 자료형 배열 이름[대괄호 안에 크기] = {중괄호 안에 값들} 2) 인덱스(index) - 인덱스는 0부터 시작(배열의 첫 번째 값의 인덱스는 0) - 인덱스를 통해 배열 안의 요소에 접근 가능 * 배열이름[인덱스값] : ex) 배열 이름[0] #include int main() { int arr[5] = {1, 2 , 4, 8, 16}; printf("arr 배열의 첫 번째(=인덱스가 0) 값 : %d\n", arr[0]); //1 printf("arr 배열의 두 번째(=인덱스가 1) 값 : %d\n", ..
[C언어] 비트 연산자, 비트 이동 연산자( &, |, ^, ~, <<, >> )
C
2021.12.09 02:27
1. 비트 연산자, 비트 이동 연산자란? - 비트를 연산할 때 쓰이는 연산자. 정수나, 정수로 변환 가능한 타입에서만 가능(실수나 포인터는 연산 불가) - 비트 : 바이트보다 더 작은 단위이며, 2진수(0, 1)를 저장. 2진수 개념이기에 생소할 수 있음. - 비트 단위로 계산하기 때문에, 일반 사칙연산보다 훨씬 속도가 빠름. - 메모리 공간의 효율성을 높이고, 연산의 수를 줄일 수 있음. - &(AND), |(OR), ^(XOR), ~(NOT),(오른쪽 이동) - 비트에 대한 연산이기 때문에, 수학적으로 이해하고자 하면 복잡해질 수 있다. 나중에 어떤 쓸모가 있을지만 고민.. - 추후에 A집단과 B집단을 비교하는 문제 등에서 사용하면 좋지 않을까...? 비트 연산자 & | ^ ~(피연산자 1개) 2 유..
[Git] 깃(git)과 깃허브(github)란 무엇인가?
[Git] 깃(git)과 깃허브(github)란 무엇인가?
Git
2021.10.29 03:13
1. GIT이란 무엇인가? 깃(Git)은 2005년에 리누스 토르발스에 의해 개발된 '분산 버전관리 시스템(Distributed Version Control Systems - DVCS)'으로, 컴퓨터 파일의 변경사항을 추적하고 여러명의 사용자들 간에 파일에 대한 작업을 조율하는데 사용된다 (참고 : https://git-scm.com/book/ko/v2 Git 공식 사이트 한글 메뉴얼). 즉, 주로 여러명의 개발자가 하나의 소프트웨어 개발 프로젝트에 참여할 때, 소스 코드를 관리하는데 주로 사용된다. 그렇다면, 2. 버전관리는 왜 필요한가? 쉬운 이해를 위해 'PPT로 발표자료를 만든다'는 하나의 가정을 들어보자. 처음에 '발표.ppt'라는 제목의 파일을 만들었다가, 내용이 바뀔 경우 '발표_최종.ppt..
[C언어] 문자열 출력과 입력
[C언어] 문자열 출력과 입력
C
2021.12.09 08:09
1. 아스키코드 문자: 알파벳 대소문자와 여타 기호를 10진법 수에 매치시켜놓은 것. 1) 변수에 문자 1개만 담기(출력) - char 형태 : 1바이트(-128~127까지 총 256가지 범위) cf0) 형식 지정자 : %c(문자 1개만 입력) cf1) char자료형은 1바이트로, 한글자(마지막 글자)만 저장. => 여러 글자 담기 위해선 배열 이용 ex) char alpha = 'ab' => b만 저장, 출력 cf2) 한글, 한자처럼 2바이트로 처리하는 '유니코드 문자'도 존재. #include int main() { char ch = 'ab'; printf("%d\n", ch); //98 출력 printf("%c\n", ch); //b 출력 return 0; } 2) 변수에 여러 글자 담기(배열 출력..
[CS] 컴파일러(Compiler)란?
CS
2021.12.12 00:38
1. 컴파일러(Compiler) - 특정 프로그래밍 언어로 쓰여 있는 문서를 다른 프로그래밍 언어 혹은 컴퓨터 언어로 옮기는, 일종의 번역 프로그램. - 비주얼, 터보, 볼랜드 등 언어에 따라 다양한 컴파일러 종류가 존재한다. - 보통 high-level 프로그래밍 언어를 실행 프로그램으로 만들기 위한 lower level언어(ex 어셈블리 언어, object 코드, 등)로 바꾸는 데에 사용 - 원래의 문서를 '소스 코드' 혹은 원시 코드라고 부름 - 출력된 문서를 '목적 코드'라고 부름 1) 컴파일러 실행 단계 (1) 구문 분석 : 소스 코드 파일을 읽어 추상 구문 트리 생성, 문법에 맞지 않는 소스 코드는 사용자에게 알림 (2) 최적화 : 추상 구문 트리 분석 및 최적화. (3) 코드 생성 : 목적 ..
[Spring] 01. 다운로드 및 환경 설정
[Spring] 01. 다운로드 및 환경 설정
1. STS4(Spring Tool Suite 4, open source) 다운로드 및 초기 환경 설정 1) https://spring.io/tools에서 STS4 다운로드 2) spring-tool-suite-4-4.13.1.RELEASE-e4.22.0-win32.win32.x86_64.self-extracting 파일 압축 풀기 후, 내부의 contents.zip도 압축 풀기 3) STS를 사용할 위치로 이동 4) 초기 환경설정(JAVA version 및 vm 경로 설정) 2. STS 실행 및 메이븐, 이클립스 웹 개발 툴 다운로드 1) STS(SpringToolSuite4.exe) 실행 2) workspace 지정 3) 메이븐 및 이클립스 웹 개발 툴 다운로드 3. 프로젝트 생성 1) [File] ..
[C언어] 기본 연산자( + , - , * , / , % )
C
2021.12.08 00:57
1. 덧셈 : 기호 '+' - 출력할 때 더한 값을 따로 저장하지 않고 바로 출력 가능. - 더한 값을 변수에 저장하는 것도 가능. cf) 정수와 실수를 더한 값은 실수형 자료형에 저장하여야 한다. //정수 덧셈 #include int main() { int a = 1; int b = 2; printf(" a + b = %d", a+b); return 0; } // 출력값 : a + b = 3 //실수 덧셈 #include int main() { float a = 1.3f; float b = 1.2f; printf("a + b = %f",a+b); return 0; } // 출력값 : a + b = 2.500000 //정수와 실수 덧셈 #include int main() { int a = 2; float..
[Spring Boot] 스프링부트 에러(
[Spring Boot] 스프링부트 에러("Path with "WEB-INF" or "META-INF")
(공통)troubleshooting
2022.03.23 02:07
0. 상황 1. 에러코드 전문 1-1) STS 콘솔에러 WARN 31216 --- [nio-8090-exec-1] o.s.w.s.r.ResourceHttpRequestHandler : "Path with "WEB-INF" or "META-INF": [WEB-INF/views/loginFrm.jsp]" 1-2) 브라우저 화면 에러 Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Wed Mar 23 01:42:57 KST 2022 There was an unexpected error (type=Not Found, status=404). No message ..
image