본문 바로가기

분류 전체보기301

WebView 만 실행되는 앱 만들기 웹뷰만 실행되는 앱을 만들기 위해서는 3 개의 파일을 수정해야 한다.activity_main.xml, AndroidManifest.xml, MainActivity.kt 또는 java1. 프로젝트 생성File > New > New project 에서 "Empty Views Activity" 를 선택** 만약 Empty Views Activity 가 아닌 Empty Activity 로 만들게되면 activity_main.xml 파일이 없다. 2. activity_main.xml 수정app > res > layout  파일 클릭해서 열면 왼쪽 아래에 "Component Tree" 가 있는데 여기서 "webView" 를 클릭한다.오른쪽 "Attributes" 패널에 어떠한 값들이 들어가 있는 것을 볼 수 있다... 2024. 7. 4.
하이브리드앱 디컴파일해서 수정하기(apktool, apksigner, chrome://inspect) 기존에 웹 서비스를 외부 업체에 외주를 주어 하이브리드 앱이 제작되어 있었다. 이유는 모르겠지만, 로그인 방식이 웹과 앱이 다르게 되어 있는데, 이러니까 소스를 고쳐도 웹은 잘되는데 앱은 이상하더라. PC 로컬 서버에서 작업하는 것 처럼 모바일에서도 똑같이 할 수 있을까?? 가능하다. original.apk 를 뜯어서 url 을 localhost 로 연결하면 되니까. 하지만 애뮬레이터에서는 localhost:4200 처럼 쓰면 안되고, http://10.0.2.2:4200 와 같이 주소를 넣어줘야 한다. 그런데, net::ERR_CLEARTEXT_NOT_PERMITTED 문구가 모바일 디바이스 스크린에 나오더라. AndroidManifest 에서 usesCleartextTraffic 을 true 로 설정.. 2024. 7. 4.
main.ts 파해치기 (useGlobalPipes 옵션 whitelist) 우선 whitelist 옵션이 무엇인지 알아보기 전에 whitelit 옵션이 없을때 어떤 일이 일어나는지 보자. 만약 사용자가 students 테이블에서 점수가 50 점 이상인 학색들 정보를 받아온다고 했을때, 사용자는 아래와 같이 서버에 요청할 것이다. URL :호스트/students?score=50Method: GET // controller.ts@Controller('students')export class StudentsController { @Get() getAllStudents( @Query() query: StudentsDto ){ return this.studentsService.getAllStudents(); }}// service.ts@Injectable.. 2024. 6. 28.
Transaction, 한 가지 이상의 CRUD 를 실행할 때 roll back 실무에서 접했던 상황을 바탕으로 설명해보자면, 데이터베이스 저장소(repository)- user_farm: 사용자의 농장정보를 담고 있다.- farm: 사용자들의 농장정보를 담고 있다.- farm_dong: 농장의 동(A농장-1동, A농장- 2동, A농장- 3동...) 정보들을 담고 있다. 사용자가 농장을 추가하면 아래와 같은 순서로 저장되는 흐름이다.1. this.userFarmRepo.save()2. this.farmRepo.save()3. this.farmDongRepo.save() // service.tsasync saveUserFarm(dto: UserFarmDto){ const model = this.userFarmRepo.create(dto); const userFarm = a.. 2024. 6. 27.
포스트맨 환경변수 활용하기 (로그인 / Auth & accessToken) 사용자가 데이터 베이스에 접근해 어떠한 정보를 새롭게 추가하거나 수정할때 Guard 에서 사용자의 인증절차를 한번 거치고 데이터베이스에 접근할 수 있도록 하는 보안 절차가 있다. JWT 토큰 방식으로 로그인이 구현되어 있는 경우 보통 accessToken 을 가지고 인증절차를 거친다. 포스트맨으로 토큰을 발급받는 API 를 호출하고, 응답으로 받은 토큰을 복사해서 CRUD 관련 API 를 호출할때 Authorization 헤더에 매번 붙혀넣는게 귀찮더라. 이때 환경변수를 사용하면 개꿀.  1. 포스트 패널에 Environments 클릭 2. + 버튼을 누르고 환경변수를 설정할 곳의 이름을 넣고 생성한다. 3. 오른쪽에서 "Add new variable" 에 환경변수 이름을 만든다. (나는 auth/log.. 2024. 6. 26.
@DeleteDateColumn 은 AND 절을 마음대로 추가한다 soft delete 을 할때 엔티티에 @DeleteDateColumn 데코레이터로 삭제 날짜를 컬럼을 넣어주면 된다. 주의할점은 만약 find 메서드로 리포지토리에서 데이터를 SELECT 할때 WHERE 절 뒤에 항상 "(AND 컬럼명 IS NULL)" 이 붙는 걸 알아야 한다. (sql → SELECT * FROM farm WHERE id = 1 AND deletedAt IS NULL. 만약 삭제된 데이터도 보길 원한다면 withDeleted 옵션을 true 로 해서 find 옵션에 추가해줘야 한다. find 메서드 중 findBy, findOneBy, findAndCountBy... 와 같이 뒤에 -by 가 들어간 find 메서드는 FindOptionWhere 객체만 인자로 받기 때문에 withDe.. 2024. 6. 26.