안녕하세요. grafana 수강자 입니다. posgresSQL 설치시 에러 내용 입니다. .' Error response from daemon: ports are not available: exposing port TCP 0.0.0.0:5432 -> 127.0.0.1:0: listen tcp 0.0.0.0:5432: bind: address already in use '' port 번호를 변경하면 실행이 안돼는것 같습니다. 어떻게 해야 할까요?
초반 dmg로 다운받을때도 , 다운받고 뭐 초기셋팅 진행해서 해당 로그처럼 서버 데이터 베이스 선택하는거 psql에 없었는데, 명령어 찾아서 아이디 만들고 권한주고 db만들고 꾸역꾸역해서 jdbc 연결했더니 테이블안생김.. ㅈㄴ 스트레스받음. 노션에 있는거 긁어서 그대로 해서 틀린거없음 커서에서 검증도함 대체 원인을 모르겟
WITH STAT AS( SELECT publisher_id, name FROM games GROUP BY publisher_id, name HAVING COUNT(*) >=10 ) SELECT A.name FROM STAT AS A JOIN companies AS B ON A.publisher_id = B.company_id mysql로 이렇게 작성하니까 답이 하나만 나오는데, 강사님이 작성한 코드 SELECT name FROM( SELECT publisher_id, COUNT(*) AS CNT FROM games GROUP BY publisher_id HAVING CNT>= 10 ) AS A JOIN companies AS B ON A.publisher_id = B.company_id 이것과 차이가 뭔지 궁금합니다
select generate_series ( '2016-08-02' :: date , '2016-11-01' :: date , '1 day' :: interval ):: date as current_date ) 위의 쿼리로 series를 생성하신 이유가 select date_trunc ( 'day' , visit_stime ):: date as curr_date from ga_sess group by date_trunc ( 'day' , visit_stime ) ) 이 쿼리로 temp_00을 생성하면 11-01 일자의 dau를 구할수 없어서 인지 궁금합니다!
inner join과 left join에 대해서 이론적으로는 이해가 되는데 실제 테이블 관계 설정시 조인을 사용해야하는 상황에 대해서 아직 감이 잘 잡히지 않습니다. 강사님께서 조인을 선택해서 사용하실때 기준이 있을까요?? left join을 할시, 기준이 되는 테이블(부모 테이블) 붙이는 테이블(자식 테이블)로 이해를 했습니다. 부모테이블의 경우 집합레벨 1, 자식테이블 집합레벨 M으로 이해하는게 맞을까요??
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 배치에서 full outer join을 쓴다고 하셨는데 예시를 알 수 있을까요? 배치에서 쓰인다는게 잘 와닿지가 않습니다.
안녕하세요 해당 강의 2분 50초 정도에서 궁금한 것이 있습니다. 고객이 한 번도 주문을 하지 않은 경우에도 고객정보는 조회가 되어야하기 때문에 left outer join을 쓰는 이유는 이해가 되는데요. 그 다음 주문접수 직원정보를 구해야 할 때 left join을 하는 부분이 이해가 되지 않습니다. 저는 join key를 b와 c 테이블에 대해서 하니까 b와 c간의 join으로 생각이 되어서 inner join을 걸었었는데요. 이건 사실 customers와 employees 간의 outer join이니까 left outer join을 써야하는걸까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. select coalesce ( to_char ( b . order_date , 'yyyy' ), '총매출' ) as year , coalesce ( to_char ( b . order_date , 'mm' ), '연매출' ) as month , coalesce ( to_char ( b . order_date , 'dd' ), '월매출' ) as day , sum ( a . amount ) as sum_amount from nw . order_items a join nw . orders b on a . order_id = b . order_id group by rollup ( to_char ( b . order_date , 'yyyy' ), to_char ( b . order_date , 'mm' ), to_char ( b . order_date , 'dd' )) order by 1 , 2 , 3 ; case when 안쓰고 coalesce 해도 괜찮을것 같아요!
Custom Repository 부분에서 에러가 나서 해결 하긴 하였으나 맞는 과정인지는 잘 몰라 문의드립니다. 강의에서 사용하는 @EntityRepository방식은 구버전(0.2.x) 방식으로 최신버전에서는 제거되었습니다. 강의 코드를 그대로 따라하면 ... is not a function같은 에러가 발생합니다. 그래서 user.repository.ts, auth.modules.ts 수정, auth.service.ts를 수정 1. user.repository.ts 수정 1. user.repository.ts 수정 Repository를 일반 서비스로 만들기 위한 핵심 작업입니다. 수정 내용: @EntityRepository(User) 데코레이터를 삭제하고 @Injectable()을 추가했습니다. Repository 클래스를 초기화하기 위해 constructor (생성자)를 추가하고, 그 안에서 super()를 호출했습니다. // src/auth/user.repository.ts import { Injectable } from '@nestjs/common'; import { DataSource, Repository } from 'typeorm'; import { User } from './user.entity'; // ... @Injectable() // ✅ 변경 export class UserRepository extends Repository<User> { // ✅ 생성자 추가 constructor(private dataSource: DataSource) { super(User, dataSource.createEntityManager()); } async createUser(/* ... */): Promise<void> { // ... } } 2. auth.service.ts 수정 -> providers 배열에 UserRepository를 추가했습니다. 이유: providers 배열에 등록해야만 AuthModule이 "아, UserRepository라는 서비스를 모듈로 포함시켰습니다. // src/auth/auth.module.ts import { UserRepository } from './user.repository'; // ... @Module({ imports: [TypeOrmModule.forFeature([User])], controllers: [AuthController], providers: [ AuthService, UserRepository, // ✅ UserRepository를 providers에 등록 ], }) export class AuthModule {} 3.auth.service.ts 수정 > 서비스에서 Repository를 주입받는 방식을 변경합니다. 수정 내용: @InjectRepository(User) 데코레이터를 삭제하고, 생성자에서 UserRepository를 직접 타입으로 선언하여 주입받습니다. 이유: UserRepository는 이제 마법 같은 존재가 아닌 일반 서비스이므로, 다른 서비스를 주입받을 때와 똑같이 클래스 이름만으로 간단하게 주입받을수 있습니다. // src/auth/auth.service.ts import { Injectable } from '@nestjs/common'; import { UserRepository } from './user.repository'; // 🗑️ import { InjectRepository } from '@nestjs/typeorm'; <- 삭제 @Injectable() export class AuthService { constructor( // 🗑️ @InjectRepository(User) <- 삭제 private userRepository: UserRepository, // ✅ 직접 주입 ) {} async signUp(/* ... */): Promise<void> { return this.userRepository.createUser(/* ... */); } } 일단 이런식으로 수정했는데 이 과정이 맞는지는 잘 모르겠습니다! 강사님이나 따로 혹시 올라와 있는 코드가 있다면 참고해보겠습니다!
우선 typeorm.ts, app.modules.ts 두 파일 코드 복사 붙여넣기 하면 app.modules.ts 의 TypeOrmModule.forRootAsync({ inject: [ConfigService], useFactory: async (configService: ConfigService) => configService.get('typeorm'), }), useFactory에서 린트에러가 발생합니다. configService.get('typeorm')의 타입이 undefined 일 수도 있어서 에러가 발생하는데 타입 지정해서 서버 실행하면 일단 실행은 됩니다. 문제는 이 다음에 package.json에 마이그레이션 스크립트 추가 후 서버 실행하고 터미널 창 새로 열어서 npm run migration:generate --name=Initial_Migration 명령어 실행하면 migration 관련 파일은 잘 생성이됩니다. 내용도 잘 들어가있어요 posts 테이블 만들고 index 들 설정하는 쿼리들 다 제대로 적혀있습니다만 npm run migration:run 명령어 실행시 migrations 테이블은 생성되는데 안에 레코드가 하나도 없고, posts 테이블은 아예 생성이 안됩니다.
안녕하세요. 강의를 들으면서 잘 이해가 되지 않는 부분이 있어 질문 드립니다. 질문 드리고자 하는 부분은 "직원명 SMITH의 과거 소속 부서 정보를 구할 것"이라는 문제의 쿼리문인데요. 우선 제가 작성한 쿼리문은 아래와 같습니다. select a . ename , a . empno , b . deptno , c . dname , b . fromdate , b . todate from hr . emp a join hr . emp_dept_hist b on a . empno = b . empno join hr . dept c on a . deptno = c . deptno where a . ename = 'SMITH' ; 그리고 강사님께서 작성하신 쿼리문은 아래와 같구요. select a . ename , a . empno , b . deptno , c . dname , b . fromdate , b . todate from hr . emp a join hr . emp_dept_hist b on a . empno = b . empno join hr . dept c on b . deptno = c . deptno where a . ename = 'SMITH' ; 두 쿼리문의 차이는 join hr.dept c on 부분에서 "a.deptno = c.deptno"과 "b.deptno = c.deptno"입니다. 제 생각에는 위 두 쿼리문이 같은 결과를 뱉어야 할 것 같은데.. 아래 쿼리문 결과를 보면 dname 부분이 다르게 출력됩니다. 1) 제가 작성한 쿼리문 결과 2) 강사님이 작성하신 쿼리문 결과 제 짧은 지식으로는 두 결과가 동일해야 할 것 같은데, 제가 잘못 생각한 부분이 있다면 말씀 부탁드립니다 ㅠ
안녕하세요 조인실습03 - 8:25에서 join 관련 질문입니다. [ 이해한 내용 ] - shippers의 shipper_id - orders의 ship_via 컬럼명만 다를 뿐, shipper_id가 pk컬럼인데, orders에서 fk로 만들 때 ship_via로 만든 것이다. 그래서 두 컬럼이 조인된다. [ 궁금한 사항 ] 두 컬럼이 PK - FK 관계라는 판단 근거가 어떻게 되나요? Dbeaver에서 이를 쉽게 확인할 수 있나요? 제가 수강한 진도까지는 이러한 내용이 나오지 않고 ERD를 봐도 모르겠어서 질문드립니다.
안녕하세요 조인실습03 - 8:25에서 join 관련 질문입니다. [ 이해한 내용 ] - shippers의 shipper_id - orders의 ship_via 컬럼명만 다를 뿐, shipper_id가 pk컬럼인데, orders에서 fk로 만들 때 ship_via로 만든 것이다. 그래서 두 컬럼이 조인된다. [ 궁금한 사항 ] 두 컬럼이 PK - FK 관계라는 판단 근거가 어떻게 되나요? Dbeaver에서 이를 쉽게 확인할 수 있나요? 제가 수강한 진도까지는 이러한 내용이 나오지 않고 ERD를 봐도 모르겠어서 질문드립니다.
select page_path , count (*) as hits_cnt , count ( distinct a . sess_id ) as net_cnt from ga_sess a join ga_sess_hits b on a . sess_id = b . sess_id where hit_type = 'PAGE' group by page_path order by 2 desc 저도 아래 질문글처럼 같은 방식으로 쿼리를 작성했습니다. 이전섹션인 일별 페이지 조회수와 양식이 유사해서 저한테 더 익숙했기 때문입니다 그런데 수업에서 사용한 쿼리가 제 쿼리보다 월등히 처리속도가 빠르더라고요(3s vs 4.7s). SQL숙련도가 올라가면 튜닝이라는걸 통해 처리속도를 최적화해야 한다고 들었습니다. 나중을 대비해서 익숙한 제 쿼리보다는 처리속도가 빠른 선생님 코드처럼 코드작성 습관을 바꾸는게 좋을까요?
덤프 파일 다운(.backup) brew install libpq(terminal) echo 'export PATH="/opt/homebrew/opt/libpq/bin:$PATH"' >> ~/.zshrc source ~/.zshrc ln -s /opt/homebrew/opt/libpq/bin ~/'적절한 경로' (파인더에서 참조할 수 있도록 경로 설정, 기존 brew 설치 경로에서는 파인더에서 비하인드 처리되어 이를 찾을 수 없도록 되어있음) Driver Manager > Edit Driver 'PostgreSQL' > Local Client 탭에서 ~/'적절한 경로' 로 선택 스키마 import 완료(최종사진첨부 )
Cannot find module './app.controller' or its corresponding type declarations. Cannot find module './app.service' or its corresponding type declarations. 저런 내용이 아예 없는데 코드에서 저게 잘못됐다고 뜨네요.... 파일구조도 다 맞는것 같은데 왜 계속 저런 오류가 뜨는걸까요ㅜㅜ