목록분류 전체보기 (297)
가수면
컴퓨터 메모리 부족 문제 Error occurred during initialization of VM Could not reserve enough space for 2097152KB object heap JVM에 할당하기 위한 컴퓨터 메모리가 부족하다는 오류이다.이 경우 컴퓨터의 여유 메모리를 확보하든가, gradle.properties의 설정을 통해 JVM에 할당하는 메모리를 줄여야한다.// android/gradle.propertiesorg.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m-Xmx2048m: 이 옵션은 JVM에 할당할 수 있는 최대 메모리 양-XX:MaxMetaspaceSize=512m: 타스페이스에 사용할 수 있는 최대 메모리. 메타스페이스..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/d6OyiM/btsHec6ze7T/kG0wTF3qN98pP6Ztb2opbK/img.png)
React Native를 위한 안드로이드 스튜디오 설치 및 세팅https://reactnative.dev/docs/environment-setup Setting up the development environment · React NativeThis page will help you install and build your first React Native app.reactnative.devhttps://developer.android.com/studio/run/emulator-acceleration Configure hardware acceleration for the Android Emulator | Android Studio | Android DevelopersDiscover how the ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/EvShp/btsGRpR6Zj3/JJlnoQxePAWx8BG8ZaNiOk/img.png)
설치 및 구성Next의 경우npm init playwright# oryarn create playwright# orpnpm create playwright기타https://playwright.dev/docs/intro#installation Installation | PlaywrightIntroductionplaywright.dev테스트 실행테스트를 실행하는 방법에는 여러가지가 있다.1. Playwright Test for VSCode 확장 프로그램 설치설치하면 좌측에 탭 목록에 '테스트' 탭이 생긴다. 해당 탭에서 테스트 실행.2. 명령어 입력// 헤드리스 모드에서 실행되며, 테스트 결과와 테스트 로그가 터미널에 표시npx playwright test// 테..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ecvzu2/btsGNPddytt/XXvkAzzFwN9mCocbuanVjk/img.png)
초기 상태값을 설정하는 과정에서 'next referenceerror: localstorage is not defined'와 같은 오류가 발생하는 경우가 있다. 단순 해결 방법이야 간단하다.상태값의 업데이트를 useEffect 안에서 수행하거나, typeof window === 'undefined'와 같은 타입 가드를 사용하면 오류를 해결할 수 있다. 그러나 만약 '로그인 한 상태에서 새로고침 시 로딩이나 로그인 버튼 노출 없이 바로 닉네임이 노출되도록 하는 기능'을 구현한다고 한다면, 위 방법으로는 해결할 수 없다. 내가 바로 이 경우였는데, 오류 해결 이후 원하는 기능을 구현하기 위해 나는 '왜 이런 오류가 발생한 것일까?', '구조적으로 이게 진짜 한계인 건가?'라는 의문을 품게 되었다..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b82r23/btsGB1RoQTj/YKkJkWKV94V3RYdqUqYwYK/img.png)
기본 환경 설정 도커 설치 도커 설치 방법은 아래 글 참조 https://jhchoi1182.tistory.com/282 EC2로 Docker를 이용해 배포하기 (feat. Mysql) 개발 환경 설정 문서는 다음 과정을 따른다. Dockerfile을 생성해 도커 내부로 파일을 옮긴 뒤 도커 이미지를 생성하고, Docker Compose로 컨테이너를 실행한다. (도커 컴포즈를 사용하지 않고 각각 실 jhchoi1182.tistory.com 노드 설치 https://nodejs.org/en/download/package-manager // Node Version Manager 설치 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install...
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/beZmif/btsGzeYF1h3/J9d6DKB38LKflKp4Cjmb9k/img.png)
Vercel 프로세스 ※ 일부 Vercel 내부에서 사용되는 기술적 세부사항은 추측으로, 이해하기 쉽도록 예시를 드는 것으로 한다. 배포 프로세스 1. 배포 트리거 2. 프로젝트의 코드와 파일 업로드 프로젝트의 코드와 파일이 데이터 저장소(Amazon S3와 같은)에 POST 요청으로 업로드된다. 3. 검증 및 권한 부여 Vercel의 내부 API에 의해 POST 요청으로 vercel.json, 유저 권한 등에 대한 검증이 이루어지고 성공 시 배포 권한이 주어진다. 4. 배포 대기열 추가 배포가 준비되었다는 메세지를 배포 대기열(Amazon SQS 추측)에 추가한다. ※ Amazon SQS (Amazon Simple Queue Service) MSA나 분산 서비스에 자주 사용되는 큐 방식의 대기열 데이터..
게시글을 조회할 때마다 조회수가 늘어나는 것을 원치 않는 상황에서 시도할 수 있는 여러 방법들에 대해 소개한다. 아래의 경우엔 데이터베이스에 직접 저장하는 방법으로 가정했기 때문에 Redis를 이용하면 해당 단점을 상당히 완화할 수 있다. 방법론 게시글 클릭 이벤트 시에만 조회수 증가하는 api 요청 보내기 - 장점 - 1. 이미 조회한 게시글에 대해 새로고침, url을 직접해 유입하는 경우 조회수가 증가하는 어뷰징을 방지할 수 있다. - 단점 - 1. 요청 api를 사용자가 수동으로 보내는 경우 조회수 어뷰징이 발생할 수 있다. 2. 이미 조회한 게시글에 대해서 클릭할 때마다 여전히 조회수가 증가한다. 요청하는 유저의 아이디를 DB에 저장해 검증 db 상의 게시글에 조회한 아이디와 그 시간을 기록해 요..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/CBqss/btsGeAF337c/zCDqu4G7QKtakD4oA2GKz1/img.png)
S3 버킷 생성 1. 버킷 생성 버킷 생성 페이지에서 차례대로 작성한다. 퍼블릭 액세스 파트에 대해선 '모든 퍼블릭 액세스 차단'의 체크를 풀어준다. (필요에 따라 세부 설정) 이후 생성 2. 버킷 정책 설정 정책 설정을 하지 않으면 저장된 파일의 url 조회 시 조회가 안 된다. 버킷으로 들어가 '권한' → '버킷 정책'의 '편집' 버튼 클릭 버킷 ARN을 복사 후 정책 생성기를 클릭한다. Step1 'S3 Bucket Policy' 선택 Step2 Principal에 * 입력 Actions에 Get Object, Put Object 체크 ARN에 복사한 것 붙여넣기 생성 후 나온 것 복사해서 정책에 붙여넣기 만약 ' Action does not apply to any resource(s) in sta..
로깅 프레임워크를 사용한 방법@Slf4j 사용 long startTime = System.nanoTime(); // 측정하고자하는 실행 코드 long endTime = System.nanoTime(); double duration = (endTime - startTime) / 1_000_000_000.0; String formattedDuration = String.format("%.2f seconds", duration); log.info("처리 시간: {}", formattedDuration);Python import time start_time = time.perf_counter() // 측정하고자하..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/MtHMR/btsHSvJunCN/57YkAMeAdz5jwZNFgDakEK/img.png)
기본 쿼리SELECT데이터를 조회할 때 사용기본 형태 - SELECT column1, column2 FROM table_name;SELECT name, age FROM users; //users 테이블에서 name과 age 컬럼을 조회INSERT새로운 데이터를 삽입할 때 사용기본 형태 - INSERT INTO table_name (column1, column2) VALUES (value1, value2);INSERT INTO users (name, age) VALUES ('John Doe', 30); //users 테이블에 새로운 사용자를 추가UPDATE기존 데이터를 수정할 때 사용기본 형태 - UPDATE table_name SET column1 = value1, column2 = value2 WHER..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bdLYfm/btsFKQXaMHu/rabfuRmeAqbo5g65DukhMk/img.png)
Profiler 리액트 팀에서 제공하는 성능 측정 툴로 크롬 확장 프로그램과 Profiler API가 존재한다. 주로 배포 환경에서 성능을 측정하게 될 텐데, 배포 환경에서는 profiler가 제외되어 빌드되어 사용할 수 없으므로 아래 명령어를 통해 빌드 시 profiler를 포함시킬 수 있다. npm run build -- --profile 1. 크롬 확장 프로그램 https://chromewebstore.google.com/detail/fmkadmapgofadopljbjfkapdkoienihi 먼저 확장 프로그램의 경우, 설치한 뒤 개발자 도구를 살펴보면 아래 탭들이 추가된 걸 볼 수 있다. 이 중 Components의 경우 리렌더링이 발생하는 컴포넌트를 확인하는데 유용하다. 'Highlight up..
쿠키에 보안 설정을 해주게 되면 서버로부터 받은 쿠키는 XSS, CSRF 공격에 대한 대비와 함께 클라이언트(웹 브라우저)가 자동으로 저장하고 관리하게 되므로 중요한 정보에 대한 보안을 강화할 수 있다. 그리고 withCredentials: true로 설정된 요청에서는 이러한 쿠키를 자동으로 서버에 전송하게 된다. 개발자가 직접 쿠키를 저장하거나 요청에 포함시키는 작업을 하지 않아도 되므로 개발 편의성도 증가한다. 프론트 프론트에서 Axios에 withCredentials 설정을 해주게 되면 서버에 CORS 요청을 할 때 쿠키, HTTP 인증 헤더 등을 자동 포함시켜 보내 사용할 수 있게 된다. 따로 interceptors를 설정해주지 않아도 말이다. (fetch에선 credentials: 'includ..
spring boot security의 사용과 rest API 서버일 때를 기준으로 한 에러 핸들링 방법을 정리한다. 인증 spring boot security를 사용하는 경우 requestMatchers를 통해 인증이 필요하지 않은 url을 예외 처리할 수 있으며, 그 외 url에 대해 인증 절차를 통과하지 못했을 경우 exceptionHandling를 이용해 전역적인 인증 에러를 발생시킬 수 있다. @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http . . . .exceptionHandling((exceptionHandling) -> exceptionHandling.authenticationEnt..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/0BHhy/btsEWwTMLbu/ldpOJiIQ0azXHIrmSZ1JI0/img.png)
Junit5 Java 환경 테스트 프레임워크 https://junit.org/junit5/docs/current/user-guide/#writing-tests JUnit 5 User Guide Although the JUnit Jupiter programming model and extension model do not support JUnit 4 features such as Rules and Runners natively, it is not expected that source code maintainers will need to update all of their existing tests, test extensions, and custo junit.org https://www.petrikainul..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/nRErh/btsDNImGDkv/mSlsFeuicJo5VBEIN2ebJ1/img.png)
외부 웹 서버 설정사이트에 접속할 때, 기본적으로 443 포트를 사용하게 되어 https://~~~.com에 에 접속하게 되면 자동으로 443 포트로 연결을 시도하게 된다. (8443같은 포트를 사용하면 주소 뒤에 포트를 적어줘야함)그렇기 때문에 일반적으로 https의 포트를 사용할 땐 443을 사용하게 되는데 리눅스와 같은 유닉스 기반 시스템에서는 1024 이하의 포트(관리자 또는 특권 포트)를 일반 사용자가 열 수 없기에 1024 이하의 포트를 사용하는 것이 권장되지 않는다 443을 사용이 권장되는데 권장되지 않는다니!? 이 문제를 외부 웹 서버(Nginx, Apache 등)를 사용해 해결할 수 있다.외부 웹 서버에서 443 포트로 HTTPS 트래픽을 수신하고, SSL/TLS 핸드셰이크를 처리한 다..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bs9Cg9/btsDmoPP9od/HLYiAJIukE0rysucAU2l21/img.png)
개발 환경 설정 문서는 다음 과정을 따른다. Dockerfile을 생성해 도커 내부로 파일을 옮긴 뒤 도커 이미지를 생성하고, Docker Compose로 컨테이너를 실행한다. (도커 컴포즈를 사용하지 않고 각각 실행하는 법은 후술) 실행이 완료되는 것을 확인하면 EC2에 적용한다. 예제는 스프링 부트와 Mysql을 포함한 예제를 사용한다. + Next 도커 배포 방법 추가 준비물: 1. 도커 설치 2. 도커 허브 회원가입 3. 스프링 부트 프로젝트 도커에서 실행시키기 위한 프로젝트 빌드 준비 1. jar 파일 이름 변경 스프링 부트의 빌드를 위해 편의상 jar파일의 이름을 app.jar로 변경한다. build.gradle에 아래 코드 추가 후 리프레쉬 bootJar { archiveFileName = ..
프로젝트 내 단어 찾기:Windows/Linux: Ctrl + Shift + FmacOS: Cmd + Shift + F 프로젝트 내 파일 찾기:Windows/Linux: Shift 두 번macOS: Shift 두 번 프로젝트 내 클래스(타입) 찾기:Windows/Linux: Ctrl + NmacOS: Cmd + O 코드 라인 복사:Windows/Linux: Ctrl + DmacOS: Cmd + D 코드 라인 이동:Windows/Linux: Alt + Shift + Up/Down ArrowmacOS: Option + Shift + Up/Down Arrow 안 쓰는 Import 정리:Windows/Linux: Ctrl + Alt + OmacOS: Cmd + Alt + O 코드 정렬Windows/Linux: ..
Spring Security는 Spring Security Filter Chain를 통해 모든 요청을 인터셉트하게 된다. 때문에 Spring Security Filter Chain을 프로젝트에 맞게 커스텀 설정해서 사용해야한다. 본 글에서는 jjwt를 이용해 JWT를 다루는 방법을 정리한다. Spring Security Filter 설정 Spring Security가 업데이트되면서 기존 WebSecurityConfigurerAdapter 클래스를 extends 하고 configure를 오버라이드하던 방식에서 SecurityFilterChain를 사용하는 방식으로 바뀜 @Configuration @RequiredArgsConstructor public class SecurityConfiguration { ..
스프링 부트를 이용해 서버를 실행했을 때 Web server failed to start. Port 8080 was already in use.라는 오류가 발생하며 서버가 실행되지 않는 문제가 발생했다. 별도로 실행시킨 것이 없는데 이랬던 경우 재부팅해서 몇 번 해결한 경험이 있었기에 재부팅을 해봤지만 이번에는 해결되지 않았다. 포트를 바꿔 실행하면 되겠지만, 언제까지고 그렇게 작업을 해갈 수는 없는 노릇이다. 오류를 해결하기 위해 검색을 통해 몇 가지 방법을 시도해봤다. 이 글을 통해 일반적인 해결 방법과 내가 해결한 방법을 정리한다. 'Web server failed to start. Port 8080 was already in use.'가 뜨는 경우 일반적인 해결 방법. 1. 실행 포트 변경 app..
API 정적 필터링 model에 응답으로 보내고 싶지 않은 필드를 필터링할 수 있음 // SomeBean // @JsonIgnoreProperties, @JsonIgnore 둘 다 정적 필터링 가능 @JsonIgnoreProperties({"field1", "field3"})// field1, field3를 필터링 public class SomeBean { private String field1; @JsonIgnore// field2를 필터링 private String field2; private String field3; // FilteringController @RestController public class FilteringController { @GetMapping("/filtering") pu..