728x90

온라인 강의 시점은 Spring Boot 버전이 2.X 이고 현재 내가 사용하는 Spring Boot 버전은 3.4.5 이다보니 오류가 발생해서 개고생을 해서 적어둔다.

chatGPT 도 엉터리로 답변을 해주는 통에 몇번의 시행착오를 거쳤다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
plugins {
    id 'java'
    id 'org.springframework.boot' version '3.4.5'
    id 'io.spring.dependency-management' version '1.1.7'
}
 
group = 'jpabook'
version = '0.0.1-SNAPSHOT'
 
java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}
 
configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}
 
repositories {
    mavenCentral()
}
 
ext {
    querydslDir = "$buildDir/generated/querydsl"
}
 
sourceSets.main.java.srcDir(querydslDir)
 
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
    annotationProcessor 'org.projectlombok:lombok'
 
    implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
    annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
    annotationProcessor 'jakarta.annotation:jakarta.annotation-api'
    annotationProcessor "jakarta.persistence:jakarta.persistence-api"
 
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'jakarta.persistence:jakarta.persistence-api:3.1.0'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
 
tasks.named('compileJava', JavaCompile).configure {
    options.annotationProcessorGeneratedSourcesDirectory = file(querydslDir)
}
 
tasks.named('test') {
    useJUnitPlatform()
}
 
tasks.named('clean') {
    delete querydslDir
}

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import com.querydsl.jpa.impl.JPAQueryFactory;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
@Configuration
public class QueryDslConfig {
 
    @PersistenceContext
    private EntityManager entityManager;
 
    @Bean
    public JPAQueryFactory jpaQueryFactory() {
        return new JPAQueryFactory(entityManager);
    }
}
 

 

QueryDSL을 사용할 때 반드시 JPAQueryFactory를 수동으로 Bean 등록해야 한다.
이 설정은 Spring이 애플리케이션 시작 시 JPAQueryFactory를 Bean으로 등록해준다.

728x90
블로그 이미지

Link2Me

,
728x90

Spring Boot 기능을 익히면서 회원 테이블을 생성하고 칼럼을 추가하면서 기능을 테스트하고 있다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
CREATE TABLE members (
  member_id bigint(20NOT NULL,
  userID varchar(60NOT NULL,
  userNM varchar(30NOT NULL,
  access int(2NOT NULL DEFAULT 1 COMMENT '접속상태',
  access_failed_count int(2NOT NULL DEFAULT 0 COMMENT '로그인실패횟수',
  access_date datetime DEFAULT NULL COMMENT '접속일자 및 시간',
  date date DEFAULT NULL COMMENT '최근접속일자',
  regNO int(5NOT NULL DEFAULT 0 COMMENT '팀서열',
  admin int(2NOT NULL DEFAULT 0 COMMENT '관리자유무',
  passwd varchar(120DEFAULT NULL,
  salt varchar(20DEFAULT NULL,
  email varchar(60DEFAULT NULL,
  org_id int(5NOT NULL DEFAULT 0 COMMENT '조직도ID',
  parent_id int(5NOT NULL DEFAULT 0 COMMENT '조직도 parent_id',
  codeID int(4NOT NULL DEFAULT 0 COMMENT '직위',
  telNO varchar(16DEFAULT NULL COMMENT '유선전화',
  mobileNO varchar(30DEFAULT NULL COMMENT '휴대폰번호',
  workrole varchar(200DEFAULT NULL COMMENT '담당업무',
  chosung varchar(10DEFAULT NULL COMMENT '초성',
  reg_date timestamp NULL DEFAULT current_timestamp() COMMENT '등록일자',
  phoneSE varchar(80DEFAULT NULL COMMENT 'deviceID',
  is_temp_password int(2DEFAULT 0 COMMENT '임시비번할당(1)',
  passwd_change_date datetime DEFAULT NULL COMMENT '비밀번호 변경일자',
  last_login_date datetime DEFAULT NULL COMMENT '마지막성공로그인시간',
  display int(2NOT NULL DEFAULT 1
ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;
 
ALTER TABLE members
  ADD PRIMARY KEY (member_id),
  ADD UNIQUE KEY userID (userID) USING BTREE;
 
ALTER TABLE members
  MODIFY member_id bigint(20NOT NULL AUTO_INCREMENT;
COMMIT;
 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import jakarta.persistence.*;
import lombok.*;
 
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
 
@Entity
@Table(name = "members")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@ToString(exclude = "roleList")
public class Member {
 
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "member_id")
    private Long memberId;
 
    @Column(name = "userID", nullable = false, unique = truelength = 60)
    private String userID;
 
    @Column(name = "userNM", nullable = falselength = 30)
    private String userNM;
 
    @Column(name = "regNO")
    private int regNO;
 
    @Column(name = "admin")
    private int admin;
 
    @Column(name = "passwd"length = 120)
    private String passwd;
 
    @Column(name = "salt"length = 20)
    private String salt;
 
    @Column(name = "email"length = 60)
    private String email;
 
    @Column(name = "org_id")
    private Integer orgId;
 
    @Column(name = "parent_id")
    private Integer parentId;
 
    @Column(name = "codeID")
    private Integer codeID;
 
    @Column(name = "telNO"length = 16)
    private String telNO;
 
    @Column(name = "mobileNO"length = 30)
    private String mobileNO;
 
    @Column(name = "workrole"length = 200)
    private String workrole;
 
    @Column(name = "access")
    private Integer access;
 
    @Column(name = "chosung"length = 10)
    private String chosung;
 
    @Column(name = "access_failed_count")
    private Integer accessFailedCount;
 
    @Column(name = "access_date")
    private LocalDateTime accessDate;
 
    @Column(name = "reg_date", columnDefinition = "timestamp default current_timestamp")
    private LocalDateTime regDate;
 
    @Column(name = "date")
    private LocalDate date;
 
    @Column(name = "phoneSE"length = 80)
    private String phoneSE;
 
    @Column(name = "is_temp_password")
    private Integer isTempPassword; // 관리자 임시 비밀번호 할당 여부
 
    @Column(name = "passwd_change_date")
    private LocalDateTime passwdChangeDate; // 비밀번호 변경일자
 
    @Column(name = "last_login_date")
    private LocalDateTime lastLoginDate;
 
    @Column(name = "display")
    private Integer display;
 
    @Builder.Default
    @OneToMany(mappedBy = "member", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private List<MemberRoleList> roleList = new ArrayList<>();
 
    public void addRole(MemberRoleList role) {
        this.roleList.add(role);
    }
 
    public void clearRoles() {
        this.roleList.clear();
    }
}
 

 

 

728x90
블로그 이미지

Link2Me

,
728x90

mariaDB 를 주로 사용하는데 PostgreSQL 를 설치 및 사용이 필요해서 설치하는 과정을 적은 스크립트를 적어둔다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
################################
##### PostgreSQL 15 버전 설치 #####
################################
# Rocky Linux 9.5에서 MariaDB와 PostgreSQL을 동시에 설치하고 운용하는 것은 완전히 가능
 
# 현재 설치된 PostgreSQL 버전 확인
dnf list installed | grep postgres
 
rpm -qa | grep postgres
 
# PostgreSQL 13 삭제
# sudo dnf remove 명령어로 하나씩 찾아서 삭제한다.
 
# PostgreSQL 13 데이터 디렉터리 제거 (선택 사항)
sudo rm -rf /var/lib/pgsql/13
 
# postgreSQL 15 저장소 추가
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
 
#기존 내장된 PostgreSQL 저장소 비활성화
sudo dnf -qy module disable postgresql
 
# PostgreSQL 15 설치
sudo dnf -update
 
sudo dnf install -y postgresql15-server
 
# PostgreSQL 15 데이터베이스 구성 초기화
sudo postgresql-15-setup initdb
 
# PostgreSQL 15 실행 및 서비스 등록
sudo systemctl enable postgresql-15
sudo systemctl start postgresql-15
 
# PostgreSQL 상태 확인
sudo systemctl status postgresql-15
 
# PostgreSQL 15 확인 및 유지
/usr/pgsql-15/bin/psql --version
 
# PATH에 PostgreSQL 15 바이너리 추가 (권장)
echo 'export PATH=/usr/pgsql-15/bin:$PATH' >> ~/.bash_profile
source ~/.bash_profile
 
psql --version
 
#########################################################
# PostgreSQL 15 암호화 설정
1. postgres 사용자로 전환
sudo --u postgres
 
2. psql 실행
psql
 
3. 비밀번호 설정
\password
 
"postgres" 사용자의 새 암호:
 
# 특정 비밀번호로 직접 지정:
ALTER USER postgres WITH PASSWORD '새비밀번호';
ALTER USER postgres WITH PASSWORD 'Wonderfull!!';
 
4. 종료
\q
 
# 변경 후 PostgreSQL 재시작: ==> 반드시 root 권한으로 접속된 상태에서 실행 가능
sudo systemctl restart postgresql-15
 
#######################################################################
# pgAdmin 4 Web 모드 설치 (Rocky Linux 9.5)
#######################################################################
1. 필수 패키지 설치
sudo dnf install -y yum-utils
 
2. pgAdmin 4 저장소 추가
sudo rpm -i https://ftp.postgresql.org/pub/pgadmin/pgadmin4/yum/pgadmin4-redhat-repo-2-1.noarch.rpm
 
3. 시스템 패키지 목록 업데이트
sudo dnf update -y
 
4. pgAdmin 4 설치
sudo dnf install -y pgadmin4
 
5. Apache 웹서버 시작 및 활성화
sudo systemctl enable httpd
sudo systemctl start httpd
 
6. pgAdmin 4 웹 모드 설정
sudo /usr/pgadmin4/bin/setup-web.sh
 
→ 웹 접속용 이메일/비밀번호 입력
이 명령을 실행하면 관리자 이메일과 비밀번호를 설정하라는 메시지가 나타납니다. 
입력 후 Apache 웹서버가 자동으로 재시작됩니다.
 
7. 방화벽 설정 (HTTP 포트 80 허용)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload
 
8. pgAdmin 4 접속
# 웹 브라우저에서 다음 주소로 접속하세요:
http://<서버 IP 또는 도메인>/
 
#######################################################################
####### 실제 적용 예제 ######
#######################################################################
sudo --u postgres
psql
 
-- DB 생성
create database malldb ENCODING 'UTF8';
\c malldb
 
-- 테이블 생성
CREATE TABLE members (
    member_id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    userID VARCHAR(60NOT NULL UNIQUE,
    userNM VARCHAR(30NOT NULL,
    access INTEGER NOT NULL DEFAULT 1,
    access_failed_count INTEGER NOT NULL DEFAULT 0,
    access_date TIMESTAMP NULL,
    date DATE DEFAULT NULL,
    regNO INTEGER NOT NULL DEFAULT 0,
    admin INTEGER NOT NULL DEFAULT 0,
    passwd VARCHAR(120DEFAULT NULL,
    email VARCHAR(60DEFAULT NULL,
    orgId INTEGER NOT NULL DEFAULT 0,
    parent_id INTEGER NOT NULL DEFAULT 0,
    codeID INTEGER NOT NULL DEFAULT 0,
    telNO VARCHAR(16DEFAULT NULL,
    mobileNO VARCHAR(30DEFAULT NULL,
    workrole VARCHAR(200DEFAULT NULL,
    chosung VARCHAR(10DEFAULT NULL,
    reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    phoneSE VARCHAR(80DEFAULT NULL,
    display INTEGER NOT NULL DEFAULT 1,
    org_id INTEGER DEFAULT NULL
);
 
-- 주석 설정
COMMENT ON COLUMN members.access IS '접속상태';
COMMENT ON COLUMN members.access_failed_count IS '로그인실패횟수';
COMMENT ON COLUMN members.date IS '최근접속일자';
COMMENT ON COLUMN members.regNO IS '팀서열';
COMMENT ON COLUMN members.admin IS '관리자유무';
COMMENT ON COLUMN members.orgId IS '조직도ID';
COMMENT ON COLUMN members.parent_id IS '조직도 parent_id';
COMMENT ON COLUMN members.codeID IS '직위';
COMMENT ON COLUMN members.telNO IS '유선전화';
COMMENT ON COLUMN members.mobileNO IS '휴대폰번호';
COMMENT ON COLUMN members.workrole IS '담당업무';
COMMENT ON COLUMN members.chosung IS '초성';
COMMENT ON COLUMN members.reg_date IS '등록일자';
COMMENT ON COLUMN members.phoneSE IS 'deviceID';
 
-- 테이블 생성 확인
\dt
 
-- 특정 테이블 구조 보기
\d members
 
-- 해당 DB 접속
\c malldb
 
-- 인덱스 확인
\di members*
 
-- 인덱스 추가 (CREATE INDEX)
CREATE INDEX idx_userid ON members(userID);
 
-- 여러 칼럼 복합 인덱스 
CREATE INDEX idx_userid_orgid ON members(userID, orgId);
 
-- 유니크 인덱스
CREATE UNIQUE INDEX idx_userid_unique ON members(userID);
 
-- 인덱스 삭제 (DROP INDEX)
-- 기본 문법
-- DROP INDEX index_name;
DROP INDEX idx_userid;
 
############################################################################
# 사용자 권한 부여
sudo --u postgres
psql
 
-- 1. 사용자 생성
CREATE USER codefox WITH PASSWORD 'Wonderfull!!';
 
-- 2. 특정 데이터베이스에 대한 모든 권한 부여 (예: malldb)
GRANT ALL PRIVILEGES ON DATABASE malldb TO codefox;
 
-- 3. (선택) 해당 데이터베이스의 모든 테이블, 시퀀스, 함수에 대한 권한 부여
-- DB를 처음 생성한 경우에는 필요 없지만, 이후 객체 생성 시엔 아래도 고려해야 합니다
\c malldb  -- 해당 DB에 접속한 후 실행
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO codefox;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO codefox;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO codefox;
 
-- 4. (선택) 앞으로 생성되는 객체에도 권한 자동 부여
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO codefox;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO codefox;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON FUNCTIONS TO codefox;
 
-- 5. 빠져나오기
\q
exit
#######################################################################
# PATH 추가 (권장)
echo 'export PATH=/usr/pgsql-15/bin:$PATH' >> ~/.bash_profile
source ~/.bash_profile
 
# DB 백업
sudo --u postgres
pg_dump -U postgres -d malldb -F p -f malldb.sql
 
# 다운로드 받은 파일의 경로
cd /var/lib/pgsql/
 
#######################################################################

 

 

 

 

 

728x90
블로그 이미지

Link2Me

,
728x90

명령어를 찾을 수 없어서 개삽질을 한참했다.

build.gralde 에 아래와 같이 추가를 하고 컴파일을 하면 에러가 계속 발생한다.

// P6Spy
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'
implementation 'org.hibernate.orm:hibernate-core:6.2.12.Final'

 

그런데 이걸 Disable 시켜도 동일해서 아래와 같이 해결했다.

 

 

'Modify options' 버튼을 눌러 'Add VM options'를 선택

 

새벽에 잠도 못자고 뭐하는 개짓거리인지 ㅠㅠㅠ

해결 되었는데 잠이 오려나 모르겠네.

728x90

'Spring Boot > IDEA' 카테고리의 다른 글

Spring Boot 테스트 Class 자동 생성 단축키  (0) 2025.04.10
Spring Boot Build 하기  (0) 2025.03.08
IntelliJ IDEA Auto Import 설정  (0) 2025.03.01
Build Gradle Update  (0) 2025.02.27
IntelliJ IDEA 에서 Spring 프로젝트 생성  (0) 2021.10.20
블로그 이미지

Link2Me

,
728x90

스프링부트에서 테스트 코드 Class 를 자동으로 생성하는 단축키

 

728x90

'Spring Boot > IDEA' 카테고리의 다른 글

--add-opens java.base/java.lang=ALL-UNNAMED  (0) 2025.04.11
Spring Boot Build 하기  (0) 2025.03.08
IntelliJ IDEA Auto Import 설정  (0) 2025.03.01
Build Gradle Update  (0) 2025.02.27
IntelliJ IDEA 에서 Spring 프로젝트 생성  (0) 2021.10.20
블로그 이미지

Link2Me

,
728x90

전체 자료를 csv 파일로 받은 걸 업로드 목적으로 만든 테이블 구조이다.

기존 테이블과 동일한 구조인데 index 부분을 좀 더 추가했다.

총 자료 개수는 1100만개 정도되고, 운영 자료만 450만개 정도 되더라.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
DROP TABLE `LocaldataCSV`;
CREATE TABLE `LocaldataCSV` (
  `idx` int(11NOT NULL COMMENT '번호',
  `opnSvcNm` varchar(200DEFAULT NULL COMMENT '개방서비스명',
  `opnSvcId` char(10NOT NULL COMMENT '개방서비스ID',
  `opnSfTeamCode` char(7NOT NULL COMMENT '개방자치단체코드',
  `mgtNo` varchar(40NOT NULL COMMENT '관리번호',
  `apvPermYmd` varchar(12NOT NULL COMMENT '인허가일자',
  `apvCancelYmd` varchar(12DEFAULT NULL COMMENT '인허가취소일자',
  `trdStateGbn` varchar(5NOT NULL COMMENT '영업상태코드',
  `trdStateNm` varchar(100DEFAULT NULL COMMENT '영업상태명',
  `dtlStateGbn` varchar(4DEFAULT NULL COMMENT '상세영업상태코드',
  `dtlStateNm` varchar(255DEFAULT NULL COMMENT '상세영업상태명',
  `dcbYmd` varchar(12DEFAULT NULL COMMENT '폐업일자',
  `clgStdt` varchar(12DEFAULT NULL COMMENT '휴업시작일자',
  `clgEnddt` varchar(12DEFAULT NULL COMMENT '휴업종료일자',
  `ropnYmd` varchar(12DEFAULT NULL COMMENT '재개업일자',
  `siteTel` varchar(100DEFAULT NULL COMMENT '전화번호',
  `siteArea` varchar(18DEFAULT NULL COMMENT '소재지면적',
  `sitePostNo` varchar(7DEFAULT NULL COMMENT '지번우편번호',
  `siteWhlAddr` varchar(200DEFAULT NULL COMMENT '지번주소',
  `rdnWhlAddr` varchar(200NOT NULL COMMENT '도로명주소',
  `rdnPostNo` varchar(7DEFAULT NULL COMMENT '도로명우편번호',
  `bplcNm` varchar(100NOT NULL COMMENT '사업장명',
  `lastModTs` varchar(20DEFAULT NULL COMMENT '최종수정일자',
  `updateGbn` char(1DEFAULT NULL COMMENT '데이터갱신구분',
  `updateDt` date DEFAULT NULL COMMENT '데이터갱신일자',
  `uptaeNm` varchar(100DEFAULT NULL COMMENT '업태구분명',
  `x` char(20DEFAULT NULL COMMENT '좌표정보(X)',
  `y` char(20DEFAULT NULL COMMENT '좌표정보(Y)',
  `display` tinyint(2NOT NULL DEFAULT 1,
  `region` varchar(10DEFAULT NULL COMMENT '지역'
ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='Local Data Table';
 
ALTER TABLE `LocaldataCSV`
  ADD PRIMARY KEY (`idx`),
  ADD UNIQUE KEY `mgtNo` (`opnSfTeamCode`,`mgtNo`,`opnSvcId`) USING BTREE,
  ADD KEY `bplcNm_rdnWhlAddr` (`bplcNm`,`rdnWhlAddr`,`trdStateGbn`),
  ADD KEY `region` (`region`),
  ADD KEY `apvPermYmd` (`apvPermYmd`),
  ADD KEY `roadAddress` (`rdnWhlAddr`),
  ADD KEY `jiAddress` (`siteWhlAddr`),
  ADD KEY `uptaeNm` (`uptaeNm`);
 
ALTER TABLE `LocaldataCSV`
  MODIFY `idx` int(11NOT NULL AUTO_INCREMENT COMMENT '번호';
COMMIT;
 

 

테이블 구조 SQL 파일

LocaldataCSV.sql
0.00MB

 

이제 전체자료 csv 파일을 서버에 업로드하고 자료를 자동으로 읽어들이는 코드를 구현해야 한다.

파일 개수가 너무 많아서 메모리 걱정도 되고 그렇지만 시도해보려고 한다.

728x90
블로그 이미지

Link2Me

,
728x90

네이버 증권 뉴스를 엑셀로 저장하는 코드 예제이다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import requests
from bs4 import BeautifulSoup
import pandas as pd
from datetime import datetime  # Importing datetime module
 
today = datetime.now().strftime("%Y-%m-%d")
data = []
for i in range(150):
    url = f"https://finance.naver.com/news/mainnews.naver?date={today}&page={i}"
    headers = {"User-Agent""Mozilla/5.0"}
    response = requests.get(url, headers=headers)
    response.raise_for_status()
    soup = BeautifulSoup(response.text, "html.parser")
 
    articles = soup.select(".block1")
    for article in articles:
        title = article.select_one(".articleSubject > a").text
        link = "https://finance.naver.com" + article.select_one(".articleSubject > a").get("href")
        content = article.select_one(".articleSummary").contents[0].strip()
        press = article.select_one(".press").text.strip()
        date = article.select_one(".wdate").text.strip()
        data.append([title, link, content, press, date])
 
    if soup.select_one(".pgRR"is None:
        break
 
df = pd.DataFrame(data, columns=['제목','링크','내용','언론사','날짜'])
df.to_csv("naver_finance_news.csv", index=False, encoding="utf-8-sig")  # UTF-8 인코딩 설정
 

 

 

 

 

 

728x90
블로그 이미지

Link2Me

,
728x90

 

 

개삽질을 해도 우측에 로그인/로그아웃 버튼이 보이도록 하는 것이 안된다.

npm install mdb-react-ui-kit@7.2.0

로 버전을 낮추고 나서야 해결(?)이 되었다.

 

현재 최신버전이 9.0.0 이다. 8.0.0 버전으로 변경만 해도 동일하게 로그인/로그아웃 버튼이 Home 메뉴 아래로 가버린다.

이걸 공개한 회사는 이런 현상이 발생한 것을 모르고 있는 걸까?

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
##################################################################################################
### 프로젝트 생성 및 모듈 설치
##################################################################################################
### 프로젝트 생성 : 대문자는 포함할 수 없다.
npx create-react-app mdb
 
cd mdb
 
# 모듈 설치 ==> mdb가 최신버전을 지원하지 않기 때문에 아래 버전으로 설치 필요
npm install react react-dom
npm install mdb-react-ui-kit@7.2.0
npm install react-router-dom
npm install @fortawesome/fontawesome-free
npm install bootstrap
npm install axios
 
############################################
# RSA 암호화
npm install jsencrypt
 
############################################
### React with Spring Boot API
############################################
# Redux
npm install @reduxjs/toolkit react-redux
npm install react-cookie
 
##################################################################################################
# 기존 모듈 삭제하고 다시 설치
rm -rf node_modules package-lock.json
npm install
 
# GitHub 에 자료 업로드할 때에 node_modules 폴더는 제외시키고 업로드한다.
 
# PowerShell에서는 rm 대신 Remove-Item 명령어를 사용
Remove-Item -Recurse -Force node_modules, package-lock.json
 
 
##################################################################################################
## index.js
##################################################################################################
import React from "react";
import ReactDOM from "react-dom/client";
import { BrowserRouter } from "react-router-dom";
import App from "./App";
import 'mdb-react-ui-kit/dist/css/mdb.min.css';
import '@fortawesome/fontawesome-free/css/all.min.css'// 아이콘용
import 'bootstrap/dist/css/bootstrap.min.css';
import 'bootstrap/dist/js/bootstrap.min.js';
 
const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
    <App />
);
 

 

 

728x90

'React > React' 카테고리의 다른 글

React 코드 비교를 통한 의미 이해  (0) 2025.03.19
React 배포를 위한 nginx 설정  (0) 2025.03.13
React Naver Map API 사용 샘플  (2) 2022.10.25
React 카카오맵 API 사용 샘플  (0) 2022.10.24
React useMemo & useCallback  (0) 2022.10.24
블로그 이미지

Link2Me

,